【发布时间】:2011-01-19 07:49:05
【问题描述】:
我有几个客户端,它们既是 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)。
任何解决方案或想法都将受到高度赞赏!
【问题讨论】:
-
如果您使用的是 glassfish,为什么要使用
activemq标签?您使用的是 Glassfish JMS 还是 ActiveMQ? -
但是您是部署同一个 EAR 三次还是只部署一次?
-
skaffman:我很抱歉没有说清楚。我确实使用的是 ActiveMQ,而不是与 Glassfish 捆绑的 OpenMQ。 ewernli:我希望部署相同的 EAR 三次。但是,就像现在一样,我将不得不重新构建 EAR(以确保源标识符不同)三次,然后部署。
标签: jakarta-ee glassfish jms activemq