Mule 在变压器中使用 JMS 连接器
Posted
技术标签:
【中文标题】Mule 在变压器中使用 JMS 连接器【英文标题】:Mule using JMS Connector in transformer 【发布时间】:2013-08-22 22:10:24 【问题描述】:我正在编写一个转换器,除其他外,它需要根据 ActiveMQ 中的给定队列中是否有待处理的消息来设置消息上的一些内容。
有没有办法将 jms:activemq-connector 传递到转换器代码中并在 transformMessage() 方法中对其进行调用以获取队列计数?
编辑:
我找到了一种使用 MuleContext 访问连接器的方法,但我没有看到我期望的结果;队列总是看起来是空的。我加载了队列,然后运行了一个调用转换器的流。在那个变压器的开始,我有以下内容:
public Object transformMessage( MuleMessage message, String outputEncoding )
throws TransformerException
MuleContext context = message.getMuleContext();
MuleRegistry registry = context.getRegistry();
JmsConnector connector = (JmsConnector)registry.lookupConnector( "AMQConnector" );
try
Session session = connector.getSession( false, false );
Queue queue = session.createQueue( "MyQueue" );
QueueBrowser browser = session.createBrowser( queue );
Enumeration enumeration = browser.getEnumeration();
boolean hasMessages = enumeration.hasMoreElements();
System.out.println( "Value is: " + hasMessages );
catch ( Exception e )
....
我看到了预期的消息数量...即,如果我从队列中的 8 条消息开始,我会看到该消息 8 次。但是,hasMessages 的值始终为 false。
我想我的问题已经变成了“如何从 Mule 转换器中获取队列计数?”
【问题讨论】:
【参考方案1】:Mule 对队列浏览没有任何 OOTB 支持,因此您的方法是正确的。
您是否有一个活动的入站端点正在消耗您在转换器中浏览的队列?如果是,也许您得到false
for hasMessages
仅仅是因为ActiveMQ 客户端已经预取了所有消息,所以队列浏览器看不到任何消息。
【讨论】:
谢谢大卫。有一个消费者,虽然它是单线程的而且相当慢。我没有意识到 ActiveMQ 的预取会使消息对队列浏览器不可见。既然您说该方法是正确的,我将花费一些测试来禁用消费者并看看我所看到的。谢谢。以上是关于Mule 在变压器中使用 JMS 连接器的主要内容,如果未能解决你的问题,请参考以下文章