1

我正在编写一个转换器,除其他外,它需要根据 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 变压器中获取队列数量?”

4

1 回答 1

2

Mule 对队列浏览没有任何 OOTB 支持,因此您的方法是正确的。

您是否有一个活动的入站端点正在消耗您在转换器中浏览的队列?如果是,那么您可能只是因为 ActiveMQ 客户端已经预取了所有消息,所以队列浏览器看不到任何消息falsehasMessages

于 2013-08-20T19:22:04.323 回答