2016-09-09 10 views
1

私はCクライアントのMQSキューからメッセージをプルしたいので、非同期的に行うのが大好きで、(明示的に)マルチスレッドを開始する必要はありません。メッセージは、「トランザクション的に」動作するがXAとは完全に互換性のない別のシステムに転送されます。だから私は、明示的に他のシステムに引き渡されたメッセージをコミット(そしてそれによって削除)する方法を持っていきたいと思います。ではなく、コミットが失敗した場合は最後のメッセージが後で成功するようにコミットします試みる。MQSeries:MCBと非同期で同期ポイント/ロールバックが可能ですか?

私はSYNCPOINTオプションについて読んできましたが、これを通常のGETでどのように使用するのかを理解していますが、非同期メッセージ取得を行う方法に関するヒントは、どんなヒント?

答えて

3

私はあなたが非同期コールバック機能を使用していることを説明していると思います。つまり、メッセージが到着したときに呼び出されるルーチンを登録し、同期ポイントの下にあることを尋ねます。ここでhttps://share.confex.com/share/117/webprogram/Handout/Session9513/share_advanced_mqi.pdfページ4+

効果的には、同期ポイントの下でMQメッセージで呼び出され、別のシステムで処理してから、返す前にメッセージをコミットまたはロールバックします。

XA 2フェーズコミットは、常に、例えば、外部システムにコミットすると停電が発生した場合、コミットを実行する時間がなかったため、作業ユニットの下のメッセージがMQ内でロールバックされます。

+0

まあ、私は確かにCBについて話しています。私のちょっとした言葉を許してください! あなたのリンクのPPTがうまく説明してくれてありがとう! あなたが後で言いたいのは、いずれにしてもSYNCPOINTの下でメッセージが表示されるということは本当です。それは素晴らしいことです!どのようにこれを学びましたか?これを明示的にする文書のいくつかを知っていますか? 私がコミットする前に死ぬと、私は再起動時に死んでしまうかもしれません。偉大ではないが問題はないが、警告に感謝する! –

+1

コールバックに使用するgetのMQGMOオプションを指定します。この場合は、MQGMOにSYNCPOINTなどのオプションを指定します。ドキュメントではわかりませんが、クイックグーグルは他のユーザーにそれを使っていることを示しています(http://www.mqseries.net/phpBB2/viewtopic.php?p=365250&sid=88daa131ff4b430c454f2cd6ae04c039など) – JasonE

+0

これは私が必要としていたヒントです。助けてくれてありがとう! –

0

編集:私の誤解は、アプリケーションがメッセージを取得するためにコールバックを使用していたことを実際には完全に非同期の動作であることに気づいていませんでした。以下の答えは無視してください。

MQGETMQGMO_SYNCPOINTとすると、MQCMITまたはMQBACKのいずれかが発行されます。

「非同期」と「同期」はmisnomersかもしれ - これらは、MQを使用してあなたのパターンです - あなたは返信メッセージを待つかどうかにかかわらず、これらのパターンは、MQがあなたの通話を処理する方法には影響しません。トランザクション管理(作業単位管理)は、要求/応答パターンの一部であるかどうかにかかわらず、SYNCPOINTを使用するMQI呼び出し全体で機能します。

+0

MQ 7.5から始まって、非同期処理(アプリケーションの視点から)の明示的な機能がAPIにあります。これは、MQIが別のメッセージを呼び出すときにコールバック関数を設定することを含みます利用可能になる。一方、アプリケーションは、それが望む他の処理を行うことができます。それはまさに「非同期」とはどういう意味ですか?各メッセージが到着するのを待っている間、アプリはブロックされません。 IBMのサンプルプログラム:https://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q024020_.htm –

+1

はい、そうです。あなたがコールバックを使っているとは言わなかったのですが(私はもっと注意を払う必要がありましたが、タイトルにMCBと言いました。明らかにMQCBを意味しています)、あなたは何回MQの周りで "非同期"の間違った使い方を聞いた。私が納得しているように出会った場合の謝罪 - それを意味するものではありません。私の答えは間違っているとマークした。 –

+0

私の少しの不正確さのせいで、私はほとんどあなたにチャンスを与えませんでした!もっと慎重になるように感謝してくれてありがとう。 –

関連する問題