1

私たちのビジネス要件では、全国に分散している数千のクライアントに更新を送信する必要があります。つまり、これらのクライアントの多くは 3g ネットワークを使用して接続しているため、多くの接続/切断が発生します...配信する必要がある更新は、「企業 A はもう現金化できません」または「企業 B は現金化できます」などです。これらの更新を配信するために、ActiveMQ の永続的なトピックを使用することを考えていました。クライアントが永続的なトピックに接続すると、接続が失われたとしても、クライアントが戻ってくるたびに、オフラインの間にそのトピックに送信されたメッセージを受信することを理解しています。大きな問題は、クライアントが私たちのシステムを起動したときに、サブスクリプションの前に、クライアントがサブスクライブしている永続的なトピックにメッセージが送信された場合はどうなるかということです。このケースは次のとおりです。

永続トピックが作成される
メッセージ 1 が永続トピックに送信される
メッセージ 2 が永続トピック クライアント A に送信される 永続トピック
クライアント A にサブスクライブする
メッセージ 3 が永続トピックに送信される
メッセージ 4 が永続トピック
クライアント A に送信さ
れる メッセージ 5 が送信される永続トピックへ
メッセージ 6 が永続トピックに送信される
クライアント A がオンラインになる

ActiveMQ の論文によると、クライアント A はメッセージ 3 から 6 を問題なく受信します。しかし、メッセージ 1 と 2 はどうでしょうか。それらのメッセージを失うわけにはいきません...

前もって感謝します!

4

1 に答える 1

1

「メッセージ 1-2」を利用できる期間。何年ものメッセージが経過した後にクライアント サブスクライバーを追加することを考えてみてください。それらもすべて配信する必要がありますか?

メッセージの履歴全体を新しいクライアントに送信する場合は、クライアントが履歴を要求する「初期ロード」手順をお勧めします。JMS リクエスト応答またはその他の機能を使用している可能性があります。

とにかく、クライアントが作成される前からいくつかのメッセージを取得できるようにしたい場合は、遡及的なコンシューマーを使用できます。

次に、ブローカー側で回復ポリシーを指定する必要があります。

時間、カウント、メモリ サイズなどに基づいて回復できます。ここでオプションと設定を参照してください。

UPDATE.TOPIC?consumer.retroactive=true クライアント側でこの機能を有効にするには、次のような宛先名を使用し ます。

于 2015-04-12T09:02:47.103 に答える