ActiveMQメッセージブローカーの単一のトピックのコンシューマーとサブスクライバーの両方であるクライアントがいくつかあります。すべてのクライアントは同じコードを共有します。実際には、(1)メッセージを生成するEJB、および(2)メッセージを消費するMDBで構成されるまったく同じエンタープライズアプリケーションを使用しています。
問題は、基本的に、クライアントA、B、およびCがあり、Aがメッセージを送信した場合、A、B、Cがすべてメッセージを受信することです。Aに独自のメッセージを受信させたくありません。
そこで、さまざまな解決策を試してみました。思いついた最善の解決策は、送信メッセージに文字列プロパティを設定することでした(例:source = myVeryOwnID)。次に、MDBで、 source<>'myVeryOwnID'のようなメッセージセレクターを設定します。
残念ながら、このIDをソースコード(私の場合は注釈内)に設定する必要があるため、これは不十分な解決策です。つまり、新しいクライアントをデプロイするときに、.EARファイルを誰かに渡すことはできません。代わりに、一意の「ソース」プロパティを使用して特別に再コンパイルする必要があります。
理想的には、MACアドレスをIDとして使用するか、Glassfish内で設定されたIDを使用したいと思います(私はGFv3を使用しています)。
どんな解決策やアイデアも大歓迎です!