【问题标题】:How to check number of pending messages or all messages are processed or not in ActiveMQ using mule flow如何使用 mule 流在 ActiveMQ 中检查待处理消息的数量或所有消息是否已处理
【发布时间】:2013-01-14 16:03:52
【问题描述】:

如果队列中的所有消息都已处理,我需要停止 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>

【问题讨论】:

  • 你能去掉"jms://vci.staging.queue?connector= jmsConnectorStagingQReaderNormal "jmsConnectorStagingQReaderNormal周围的空格吗?

标签: activemq mule


【解决方案1】:

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

为此:

  • 创建自定义组件,
  • 让 Spring 在组件中注入您的 jms:activemq-connector
  • 调用 getSession(false, false) 以获取活动的 JMS Session
  • Session 上致电createBrowser(Queue queue)(您可以通过Session.createQueue(..) 联系Queue

【讨论】:

  • 我已经实现了这个逻辑,但不知何故,来自队列浏览器的枚举没有任何元素。
  • 即使队列不是空的?
猜你喜欢
  • 2019-06-02
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 2014-09-24
  • 1970-01-01
相关资源
最近更新 更多