すべてのメッセージがキューで処理された場合、ActiveMQ コネクタを停止する必要があります。これは Mule フローで行う必要があります。
以下に示すように、vci.staging.queue の読み取り用と書き込み用の 2 つのコネクタがあります。すべてのメッセージがキューで処理されているかどうかを確認してから、リーダー コネクタを無効にします。
以下のスクリプトでは、キュー名とリーダーまたはライター コネクタを使用して 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>