0

これが私の使用例です: 私は取引アプリケーションを開発しており、見積もり全体とスナップショットの更新を新しい消費者に (最初に) 送信するのではなく、アクティブな消費者に株式の増分更新 (bidQty など) を送信したいと考えています。

さて、この動作を実現するために ActiveMQ のクラス (トピックの実装者) をオーバーライドすることは可能ですか? これに関する手がかりは役に立ちます。

他のオープンソース プロバイダーで同じことが可能である場合は、お知らせください。

4

1 に答える 1

0

これは、トピックの実装を単純に変更できる場合ではありません。実際には、特定のビジネス要件を解決するためにコア ActiveMQ 機能の実装を変更することは避けるべきです。バグを修正し、コア メッセージング機能を追加することは別のことです。

通常の ActiveMQ 機能を使用してユース ケースを解決するには、複数の方法があります。

個別の同期チャネルと更新チャネル

おそらく、「同期/スナップショット」チャネルを「増分更新」チャネルから分割します。

1 つの方法は、"snapshot-sync" をJMS 要求/応答として実装することです。この場合、コンシューマーはプロバイダーに同期を要求し、トピックを介してプッシュされる増分更新に引き続き依存します。

アドバイザリ メッセージとセレクタ

AdvisoryMessagesJMS Selectorsを組み合わせて使用​​する単一のトピックを使用して、すべてを実装することもできます。

アイデア (これはさまざまな方法で実行できます):

2 つのメッセージ プロパティを導入: MsgType と Receiver

  • 各増分更新を MsgType=inc でマークします
  • 各スナップショットに、コンシューマーのクライアント ID、Receiver= を付けます。
  • プロデューサーに ActiveMQ からのアドバイス メッセージをリッスンさせ、ストック トピックをサブスクライブする新しいクライアントがある場合に、Receiver= および MsgType=snapshot でマークされたスナップショット/同期メッセージを起動します。
  • クライアントは、次のようなセレクターでサブスクライブします

MsgType='inc' OR (MsgType='snapshot' AND Receiver=<me>)

このようにして、特定のクライアントとのスナップショット同期、およびすべてのクライアントの増分更新をトリガーできます。

すでに持っているダイナミクスについて考え始めると、おそらく別の 10 ほどのソリューションを思いつくことができます。

遡及消費者

遡及的コンシューマーを使用している可能性があります。このは、実際にあなたと同様のシナリオを示しています。

于 2014-03-23T18:50:50.463 に答える