我正在编写一个转换器,除其他外,需要根据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变换器中获取队列计数?”
答案 0 :(得分:2)
Mule对队列浏览没有任何OOTB支持,因此您的方法是正确的。
您是否有一个活动的入站端点正在消耗您在变压器中浏览的队列?如果是,也许你只是false
获得hasMessages
,因为ActiveMQ客户端已经预先获取了所有消息,因此队列浏览器看不到任何消息。