2

私はこのコンセプトに本当に感銘を受けました。「IN」という名前の WMQ 入力キューがあります (WMQ で「BACKOUT」という名前のこのキューに対して、しきい値が 4 のバックアウト キューを構成しました)。予想どおり、再試行が 3 回行われ、最終的に BACKOUT キューの数が増えていますが、メッセージを参照しようとすると、それらのメッセージが表示されません。ミュール フローを停止して WMQ エクスプローラーを再起動すると、"BACKOUT" にメッセージが表示されます。私の設定xmlを見つけてください。これについて私を助けてください。前もって感謝します。

Googleで調べたところ、トランザクションがコミットされていないという問題があることがわかりました。しかし、何度試しても問題を解決できません。親切に助けてください。

    <?xml version="1.0" encoding="UTF-8"?>
    <wmq:connector name="WMQ_Connector" hostName="hostName" port="1portName" queueManager="QM" channel="Channel" validateConnections="true" doc:name="WMQ Connector" disableTemporaryReplyToDestinations="true"/>
   <flow name="BackoutFlow1" doc:name="BackoutFlow1">
    <wmq:inbound-endpoint  queue="IN" connector-ref="WMQ_Connector" doc:name="WMQ" exchange-pattern="request-response" >

        <wmq:transaction action="ALWAYS_BEGIN"/>

    </wmq:inbound-endpoint>
        <logger message="*******#[payload]****" level="INFO" doc:name="Logger"/>
        <set-payload value="#[hi]" doc:name="Set Payload"/>

    <wmq:outbound-endpoint queue="OUT" connector-ref="WMQ_Connector" doc:name="WMQ">
        <wmq:transaction action="NONE"/>
    </wmq:outbound-endpoint>
</flow>

4

1 に答える 1

1

WebSphere MQ は、そのメッセージを同期点でバックアウト キューに書き込みます。COMMITしかし、それはアプリケーションのコンテキストを認識していません。それがなければ、ユーザーに代わって実行するかどうかもわかりません。原則として、WMQ は元に戻せないことを暗示的に実行しようとはせず、むしろプログラム側で明示的なアクションを要求します。

理論的には、プログラムはいつ を発行するかを認識してBACKOUTおり、必要に応じてすぐに を発行するCOMMITか、メッセージの処理を続行して、バックアウトされたメッセージを次の作業単位に含めます。プログラムは、たとえば、メッセージのバックアウト カウントを調べて、特定のメッセージが新しいものか再配信中であるかを判断できます。

メッセージがバックアウト キューにある場合、同期点の下にある間はメッセージを表示できません。どうやら Mule を停止すると aCOMMITが発行されているようです。バックアウトの原因となったアプリケーションが正常に停止されるのではなく強制終了された場合、通常は、暗黙のROLLBACKコマンドによってメッセージが入力キューに再キューイングされます。

Mule を停止せずにメッセージを表示するCOMMITには、プログラムで a を発行するか、読み取られてコミットされ、ロールバックされない 2 番目のメッセージをキューに入れます。そのCOMMIT2 番目のメッセージはCOMMIT、バックアウト キュー内のバックアウトされたメッセージにもなります。

于 2014-04-07T16:52:01.360 に答える