Mule (v. 2.2.1) でさらに処理するために JMS キュー (Websphere MQ) からメッセージを取得すると、誤ったエラーが発生します。以下に、影響を受けるサービスと Mule ログからの抜粋を示します。「DispatchThread: 1」の最初のセグメントは、サービスが期待どおりに機能した場合であり、「DispatchThread: 6」の 2 番目のケースは、メッセージが失われた、つまり処理されなかった場合です。
ログに示されているように、メッセージは両方のケースで処理するために processFooBar.service のイベントとしてキューに入れられますが、後者の場合、それ以上の処理のために取得されることはありません。実際の例では、ほとんどすぐにキューから取り出されて処理されます。
これは、スレッド化プロファイル (つまり、receiver-threading-profile など) の不均衡が原因であると思われますが、同時に、かなり漠然とした説明であると感じています。メッセージが跡形もなく失われる可能性があることは少し心配です。システムの負荷が増加した場合、スレッドの数を増やしても同じ問題が発生する可能性があります。
私たちの疑いが確認できれば幸いです。また、誰かが同じ問題を経験した場合、彼らはそれに対して何をしましたか? Mule 3 にアップグレードしますが、この問題は Mule 3 でも変わらないと思いますか?
サービス定義:
<service name="processFooBar">
<inbound>
<jms:inbound-endpoint queue="A.FROM.BAR"
connector-ref="fooConnector"
disableTemporaryReplyToDestinations="true">
<transformers>
<transformer ref="messageLogger"/>
<transformer ref="jmsMessageToObjectTransformer"/>
...
..
</transformers>
</jms:inbound-endpoint>
</inbound>
...
..
</service>
ログの抽出:
...
..
@ESB-: 2013-06-24 10:31:37,319 DEBUG [DispatchThread: 1] org.mule.service.AbstractService - Service: processFooBar has received asynchronous event on: jms://A.FROM.BAR
@ESB-: 2013-06-24 10:31:37,319 DEBUG [DispatchThread: 1] org.mule.model.seda.SedaService - Service: processFooBar has received asynchronous event on: jms://A.FROM.BAR
@ESB-: 2013-06-24 10:31:37,319 DEBUG [DispatchThread: 1] org.mule.model.seda.SedaService - Service processFooBar putting event on queue processFooBar.service: MuleEvent: ..., endpointEncoding=UTF-8}
@ESB-: 2013-06-24 10:31:37,321 DEBUG [processFooBar.1] org.mule.model.seda.SedaService - Service: processFooBar dequeued event on: jms://A.FROM.BAR
@ESB-: 2013-06-24 10:31:37,331 DEBUG [processFooBar.1] org.mule.model.seda.SedaService - Service processFooBar polling queue processFooBar.service, timeout = 10,000
@ESB-: 2013-06-24 10:31:37,339 DEBUG [processFooBar.2] org.mule.DefaultMuleMessage - new copy of message for Thread[processFooBar.2,5,main]
@ESB-: 2013-06-24 10:31:37,367 DEBUG [processFooBar.2] org.mule.transformer.AbstractTransformer - Setting transformer name to: fooDecoderTransformer
@ESB-: 2013-06-24 10:31:37,368 DEBUG [processFooBar.2] org.mule.transformer.AbstractTransformer - java.lang.Object has been added as source type for this transformer, there will be no source type checking performed
@ESB-: 2013-06-24 10:31:37,368 DEBUG [processFooBar.2] org.mule.transformer.AbstractTransformer - Setting transformer name to: objectToStringTransformer
...
..
@ESB-: 2013-06-24 13:19:51,896 DEBUG [DispatchThread: 6] org.mule.service.AbstractService - Service: processFooBar has received asynchronous event on: jms://FOMS.FROM.FSM.Bar
@ESB-: 2013-06-24 13:19:51,896 DEBUG [DispatchThread: 6] org.mule.model.seda.SedaService - Service: processFooBar has received asynchronous event on: jms://FOMS.FROM.FSM.Bar
@ESB-: 2013-06-24 13:19:51,897 DEBUG [DispatchThread: 6] org.mule.model.seda.SedaService - Service processFooBar putting event on queue processFooBar.service: MuleEvent: ..., endpointEncoding=UTF-8}
...
..