2

パブリッシャー (私の Java アプリケーション) がトピックに関するメッセージを公開する単純なシナリオがあります。50 のクライアントが同じ JMS トピックにサブスクライブしています。メッセージがトピックに公開されるとすぐに、50 のサブスクライバーすべてに通知されます。1 つのサブスクライバー (0ut 0f 50) だけがメッセージを処理し、処理後に確認応答を送信するとします。完了したら、Apache MQ コンソールでメッセージが消費されているのを確認できます。それ以外の場合、メッセージを受信した後にクライアントが確認を送信しない場合、メッセージは保留中のメッセージとして表示されます)。

質問は、クライアントが承認を送信し、新しいクライアントがトピックにサブスクライブすると、メッセージについて通知されるかどうかです。または、メッセージがいずれかのクライアントによって消費された方法で機能し (内部的には、いずれかのクライアントによって受信確認が送信されたことを意味します)、それ以上の通知は新しいサブスクライバーに送信されず、メッセージはトピックから削除されます。 (これは私が経験している動作ですが、http://en.wikipedia.org/wiki/Java_Message_Serviceの下のパブリッシュ/サブスクライブ モデルに従って、この方法では機能しないように見えます)?

4

1 に答える 1

3

Apache MQ を使用したことはありません。しかし、一般的に:

パブリッシュ/サブスクライブ モデルでは、メッセージがパブリッシュされると、すべてのサブスクライバーがそのパブリケーションを受け取ります。

サブスクライバーによる確認は、メッセージング プロバイダーに対してのみ行われ、パブリッシャーに対しては行われません。サブスクライバーがメッセージの受信を確認すると、そのメッセージはメッセージング プロバイダーによって削除され、メッセージが再度配信されることはありません。

メッセージがトピックに公開された後に新しいサブスクライバーが入ってきた場合、サブスクライバーはそのパブリケーションを取得しません。トピックに関する新しい出版物は、サブスクライバーによって受信されます。IBM WebSphere MQ などの一部のプロバイダーには、「パブリケーションの保持」と呼ばれる機能があり、パブリケーションのコピーがキャッシュされます。パブリケーションが作成された後に入ってくる新しいサブスクライバーは、このキャッシュされたパブリケーションを受け取ります。パブリケーションの保持機能は、トピックのパブリケーション間に時間遅延がある場合に役立ちます。新しいサブスクライバーは、パブリッシャーによって新しいパブリケーションが作成されるのを待つのではなく、キャッシュされたパブリケーションをすぐに取得します。

于 2012-11-15T04:49:56.230 に答える