0

すべてのメッセージがキューで処理された場合、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>
4

1 に答える 1

1

QueueBrowserを使用して、メッセージを消費せずに JMS キューを覗きます。

このため:

  • カスタム コンポーネントを作成し、
  • jms:activemq-connectorコンポーネントにSpringを注入し、
  • それを呼び出しgetSession(false, false)て、アクティブな JMS を取得しますSession
  • を呼び出しcreateBrowser(Queue queue)ます( でをSessionつかむことができます。QueueSession.createQueue(..)
于 2013-01-30T18:28:01.720 に答える