如何使用mule flow检查ActiveMQ中是否处理未决消息的数量或所有消息

时间:2013-01-30 18:08:28

标签: activemq mule

如果队列中已处理完所有消息,则需要停止ActiveMQ连接器。这需要在Mule流程中完成。

如下图所示,我有两个连接器,一个用于读取,另一个用于在vci.staging.queue上写入。我想检查队列中是否处理了所有消息,然后禁用阅读器连接器。

使用来自muleContext的client.request使用队列名称和读取器或编写器连接器的脚本下面总是为我返回'null'。

有没有办法获取队列中的待处理消息数或检查是否处理了所有消息,以便可以禁用连接器?

<jms:activemq-connector name="jmsConnectorStagingQReaderNormal"
                            brokerURL="${mule.activemq.broker.read.normal.url}" 
                            specification="1.1"
                            maxRedelivery="-1"
                            persistentDelivery="true"
                            numberOfConcurrentTransactedReceivers="${mule.activemq.concurrent.receivers}"
                            connectionFactory-ref="connectionFactory"
                            disableTemporaryReplyToDestinations="false">
        </jms:activemq-connector>

<jms:activemq-connector name="jmsConnectorStagingQWriter"
                            brokerURL="${mule.activemq.broker.write.url}" 
                            specification="1.1"
                            maxRedelivery="-1"
                            persistentDelivery="true"
                            numberOfConcurrentTransactedReceivers="${mule.activemq.concurrent.receivers}"
                            connectionFactory-ref="connectionFactory"
                            disableTemporaryReplyToDestinations="false">
        </jms:activemq-connector>


<script:component>
<script:script engine="groovy">
        if(muleContext.getRegistry().lookupConnector('jmsConnectorStagingQReaderNormal').isStarted()) {
            if(muleContext.client.request("jms://vci.staging.queue?connector= jmsConnectorStagingQReaderNormal ", 5000) == null) {
                muleContext.getRegistry().lookupConnector('jmsConnectorStagingQReaderNormal').stop()
             }
        }                               
        return payload
        </script:script>
</script:component>

1 个答案:

答案 0 :(得分:1)

使用QueueBrowser查看JMS队列而不消耗其消息。

为此:

  • 创建自定义组件
  • 让Spring在组件中注入jms:activemq-connector
  • 在其上调用getSession(false, false)以获取有效的JMS Session
  • 致电createBrowser(Queue queue)上的Session(您可以Queue暂停Session.createQueue(..)