我有几个客户端,它们既是 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)。
任何解决方案或想法将不胜感激!