FIFO キューを使用しない場合、Anypoint MQ Connector を consume 操作に設定して、メッセージを一度に 1 つずつ処理できます。
この操作では、キューからメッセージを取得するか、使用可能なメッセージがない場合は null を受信します。
その後の操作は、Mule バージョンに応じて異なります。
maxConcurrency="1" 属性を flow 要素に追加します。
コンポーネントが任意の時点で受信できる同時呼び出し数を 1 に設定するようにこの属性を指定します。
<flow name="testanypointmq1by1Flow4" maxConcurrency="1">
<logger level="INFO" doc:name="Logger" message="Flow triggered" />
<anypoint-mq:consume doc:name="Anypoint MQ"
config-ref="Anypoint_MQ_Config"
destination="queuename" />
<logger level="INFO" doc:name="Logger" message="Processing message received. #[payload]"/>
<anypoint-mq:ack
ackToken="#[vars.currentAckToken]"
config-ref="Anypoint_MQ_Config"
doc:name="Anypoint MQ"/>
<logger doc:name="Logger" level="INFO" message="Message processed."/>
</flow>
-
フローで processingStrategy="synchronous" を設定します。
メッセージを最初に受信した同じスレッドでメッセージを処理するようにこの属性を指定します。
-
プロセスを指定の間隔で起動するようにポーリングスコープを設定します。
<flow name="testanypointmq1by1Flow3" processingstrategy="synchronous">
<poll doc:name="Poll">
<logger doc:name="Logger" level="INFO" message="Polling fired"></logger>
</poll>
<anypoint-mq:consume config-ref="Anypoint_MQ_Configuration" destination="queuename" doc:name="Anypoint MQ"/>
<logger doc:name="Logger" level="INFO" message="Processing message received. #[payload]"/>
<anypoint-mq:ack config-ref="Anypoint_MQ_Configuration" doc:name="Anypoint MQ"/>
<logger doc:name="Logger" level="INFO" message="Message processed."/>
</flow>
anypoint-mq:consume と anypoint-mq:ack 間の処理時間がキューの [Default Acknowledgement Timeout (デフォルトの肯定応答タイムアウト)] 設定の値より高い場合、複数のインフライトメッセージが発生する可能性があります。