4

私のアプリ (Spring メッセージ リスナー) は、1 つのトランザクションでキューから読み取り、データベースに書き込みます。Atomikos を使用して、XA トランザクション動作を提供します。たとえば、kill ステートメントでアプリが突然終了すると、メッセージが失われます。使用する必要がある特定の構成はありますか? キューは永続的である必要がありますか? 現在、キューは非永続的です。私の MQ バージョンは v7.1 です。

リスナー コンテナーの Spring 構成は次のようになります。

<bean id="listenerContainer" class="com.miax.test.TestListenerMDPImpl" autowire="byName">
    <property name="connectionFactory" ref="mqConnFactory" />
    <property name="destinationName" value="QUEUE" />
    <property name="messageListener" ref="listenerAdapter" />
    <property name="transactionManager" ref="jtaTransactionManager" />
    <property name="sessionTransacted" value="true" />
    <property name="concurrentConsumers" value="1" />
    <!-- receive time out, should be less than tranaction time out -->
    <property name="receiveTimeout" value="3000" />
    <!-- retry connection every 1 seconds -->
    <property name="recoveryInterval" value="1000" />
    <property name="autoStartup" value="true" />
    <property name="sessionAcknowledgeMode" value="0" />
</bean>

その他の情報は、必要に応じて提供されます。

ありがとう。

4

1 に答える 1

4

今年の 5 月より前にダウンロードした場合、使用しているクライアントは Extended Transactional Client でなければなりません。2012 年 5 月現在、V7.0.1 以降のクライアントには XA 機能が組み込まれています。不明な場合は、WMQ クライアントの最新リリースをダウンロードしてインストールしてください。

第 2 に、XA トランザクション マネージャーは、アプリケーションから独立したキュー マネージャーへの独自の接続を持っている必要があります。これは、アプリケーションの再起動に失敗した場合にトランザクションを接続して調整できるようにするためです。これを行うには、インフォセンターのトピックXA 準拠のトランザクション マネージャーの構成で説明されているように、XX_OPEN 文字列とスイッチ ファイルを使用してトランザクション マネージャーを構成する必要があります。

WMQ には永続的なキューのようなものはありません。永続的 (または永続的でない) のはメッセージ自体です。詳細については、トピックに関する私のブログ投稿を参照してください。これはかなり重要なトピックです。人々がキュー自体が永続的であると想定すると、予期しない結果をもたらすソリューションを考案する傾向があるためです。ブログ記事を読んでください!

于 2012-09-17T14:46:10.417 に答える