1

.NET クライアントを使用して、ActiveMQ ベースのメッセージ ベースのアプリケーションを作成しようとしています。

  • クライアント 1: Web サービス (プロデューサー)
  • クライアント 2: Windows サービス (消費者)

私の質問は次のとおりです。特定のタイプまたはコンテンツのメッセージがクライアントによってキューに入れられないようにすることは可能ですか?

これをやりたい理由は、バージョンアップです。

メッセージタイプを拡張または変更する必要がある時が来ると思います。私の計画は、次の順序でその更新を行うことです。

  1. 古いバージョンのメッセージがキューに入れられないようにします。
  2. コンシューマが古いバージョンのすべてのメッセージを処理するまで待ちます。
  3. プロデューサーおよびコンシューマー ソフトウェアを更新します。

更新プロセス中も Web サービスを引き続き使用して、呼び出しに報告できるようにしたいと考えています。ただし、新しいメッセージをキューに入れることはできません。

もちろん、この問題を完全に解決するためのより良い方法がある場合は、お知らせください。

4

1 に答える 1

3

原則として、キューごとに 1 種類のペイロードのみを使用することをお勧めします。これを行う簡単な方法は、2 つの異なるメッセージ バージョンに対して 2 つの異なるキューを使用することです。何かのようなもの:

mysystem.orders.1_0
mysystem.orders.1_1

バージョンはキュー名の最後の部分にする必要があります。これにより、ActiveMQ の多くの構成オプションで使用されるワイルドカードを簡単に操作できるようになります。

異なるバージョンを異なるキューに分割することで、プロデューサーとコンシューマーを同時にアップグレードしなければならないという問題を回避できます。また、すべての 1_0 メッセージが消費されたかどうかをある程度把握できます。

于 2013-05-29T10:48:35.337 に答える