如果队列中已处理完所有消息,则需要停止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>
答案 0 :(得分:1)
使用QueueBrowser查看JMS队列而不消耗其消息。
为此:
jms:activemq-connector
,getSession(false, false)
以获取有效的JMS Session
,createBrowser(Queue queue)
上的Session
(您可以Queue
暂停Session.createQueue(..)
。