2016-05-18 1 views
0

私は1つの設計上の問題があります。DB呼び出しとMQ呼び出しを一緒にするか失敗させるか

現在のコードはまずDBを呼び出してメッセージを保存し、すぐにメッセージをPutQueueメソッドに入れるためのMQを呼び出します。これらの呼び出しは両方ともvoidを返します。

私はトランザクションを保存するためにデータベースとMqを使用しています。現在のコードは最初にメッセージをDBに保存し、次にMQにメッセージを置き、このmqはメッセージをOmniプロセスに送ります。

私は、メッセージがDBに保存され、何らかのエラーのためにMQが配置されないシナリオがあります。そのような場合、メッセージはOmniプロセスではなくDBに保存されます。私は、失敗するか失敗するかのように私のデザインを変えたいと思っています。

私はDB呼び出しを行うために、私は単にsave呼び出しでvoidを返す別のサービスを使用しています。 Message MQでも同じことが起こります。どうすれば一緒に仕事をするか一緒に失敗することができます。

私の質問が不完全であり、重要な点を見逃している場合は教えてください。

答えて

0

すべてが問題ない場合は、データベースとMQをコミットできます。それ以外の場合は、ロールバックするか、何もしないでください。どのデータベースを使用していますか?あなたのJavaプログラムが呼び出すストアドプロシージャを書くことができます。このプロシージャはすべての作業を実行できます。MQメソッドは、エラーがあったかどうかを示す値も戻すことができます。その後、エラーがあった場合、データベースから最後のメッセージを削除することができます。解決策がたくさんあります。

EDIT:申し訳ありません私はストアドプロシージャを書くことができると書いたときにOracle AQとIBM MQを間違って配置しましたが...できません。しかし、あなたは私が書いた他のことをすることができます。

+0

ibm mqおよびoracleデータベースです。保存するために、jarファイルを使用してストアドプロシージャを呼び出しています。あなたが提案した通り、私ができることは、私がsaveを行うことができるレスポンスに基づいて最初にmqを実行することです。ここで問題は、私はDBの失敗のロールバックmqの可能性があるはずです。 – user1268890

関連する問題