2

私が直面しているデザインの問題をどのように処理するかについて、いくつかのアイデアを得ることができるかどうか疑問に思いました。簡単にするために、Tomcatの3つの異なるマシン/jvmで3つのエンドポイントを実行しているとしましょう。エンドポイントには次の責任があります。

エンドポイント1-需要データを取り込み、このデータを注文要求に変換します

エンドポイント2-注文リクエストを受け取り、注文を保存して、注文を返します

エンドポイント3-注文を受け取り、ベンダー固有のxmlにフォーマットして、キューに送信します。

編集:これらのエンドポイントは、RESTを介して他のクライアントへの現在のサービスとして存在します。JTA Transaction ManagerにAtomikosを使用するオプションがあり、ActiveMQを使用しています。

そうは言っても、デマンドデータメッセージを受信するキュー設定があります。受信したデマンドデータメッセージごとに、基本的に、XAを介して1つの作業単位の3つのエンドポイントのそれぞれにそれらを到達させたいと思います。私は3つのエンドポイントのそれぞれを完全に制御しているので、それらが使用できる通信プロトコルに関してある程度の柔軟性があります。また、最終的には、これらのメッセージが毎日約50万から100万件届きます。分散トランザクションでこれらのエンドポイントを結び付けるために、どの通信プロトコルを使用しますか?

私はラクダの経験がありますが、1つの作業単位でそれらを結び付ける方法に悩まされています。これは本質的に同期しているように見えるので、RMIはJMSよりも適切でしょうか?提供された助けを前もって感謝します。

4

1 に答える 1

2

ヒューズソースのApacheCamelドキュメントから:

分散トランザクション 分散トランザクションとは、トランザクションスコープが複数のネットワークノードにまたがる分散システム内のトランザクションを指します。分散トランザクションをサポートするための基本的な前提条件は、標準形式でのトランザクションコンテキストの送信をサポートするネットワークプロトコルです(分散トランザクションマネージャーも参照)。分散トランザクションは、ApacheCamelトランザクションの範囲外です。

分散トランザクションマネージャー 通常、サーバーはトランザクションに関係するリソースに直接接続します。ただし、分散システムでは、WebサービスまたはCORBAIDLインターフェイスを介して間接的にのみ公開されるリソースに接続する必要がある場合があります。この場合、分散トランザクションをサポートできるTPモニターが必要です。さまざまな分散プロトコルのトランザクションをサポートする方法を説明するいくつかの標準が利用可能です。たとえば、WebサービスのWS-AtomicTransactions仕様やCORBAアプリケーションのCORBA Object Transaction Service(OTS)仕様などです。

だから、あなたが踏みにじられているのも不思議ではありません。ApacheCamelはあなたのユースケースをカバーしていません。

私はあなたが2つの方法に行くことができると思います:

  1. 大きな分散トランザクション
  2. 補償アクションを使用して小規模なトランザクションを調整

Tomcat のJTAJTAは、グローバルトランザクションマネージャーです。おそらく両方のソリューションでこれが必要です。(いくつかの巧妙な手間があれば、オプション2を選択しないと、管理できなくなる可能性があります。)TomcatはJTAトランザクションを実行できませんが、transactionmanagerの助けを借りて実行できます。Atomikos vs JOTM vs Bitronix vs?を参照してください。。Spring JtaTransactionManagerを追加すると、これを簡単に構成できるようになります。すべてのJMS実装がJTAをサポートしているわけではありません/XAリソースです。あなたはあなたがそうするかどうかをチェックしなければならないでしょう。

分散トランザクショントランザクション の期間はそれほど長くはありませんが、それでもかなりの期間リソースをロックしたままにし、多くのトランザクションがあります。パフォーマンスが低下します。

JTAはJTSとOTSに基づいて構築されています。JTAサーバーは、OTSを介して他のJTAサーバーとのトランザクションを調整できる必要があります。これを設定するのは簡単ではありません。まず、それをサポートする実装を見つける必要があります。そして、それを起動して実行する方法を理解する必要があります。

より高いレベルでは、WS-TransactionsとWS-Coordinationがあります。メトロガイドを参照してください。

補償アクション SOAのトランザクションは、ロールバックされないが、ステップが失敗したときに発生する混乱をクリーンアップするために補償アクションを実行できる、調整された小さなトランザクションのセットを使用する方がよい場合があることを示しています。

タイムアウト時に通知を送信することは、そのようなアクションの1つです。注文リクエストを実行できないことがわかった場合にエンドポイント1で行った注文リクエストをキャンセルすることは、別の補償アクションである可能性があります。

あなたがこのように行くことができれば、私はそれを取ります。

于 2013-03-27T22:00:00.243 に答える