骡子在变压器中使用JMS连接器

时间:2013-08-20 18:13:38

标签: activemq mule

我正在编写一个转换器,除其他外,需要根据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 个答案:

答案 0 :(得分:2)

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

您是否有一个活动的入站端点正在消耗您在变压器中浏览的队列?如果是,也许你只是false获得hasMessages,因为ActiveMQ客户端已经预先获取了所有消息,因此队列浏览器看不到任何消息。