我有一些客户端既是消费者,又是订阅ActiveMQ消息代理的单个主题的客户端。所有的客户端共享相同的代码,实际上他们使用正好是相同的企业应用程序,包括:(1)产生消息的EJB,(2)消费该消息的MDB。如何让我的MDB忽略来自其自身的消息?
问题是,如果我有客户端A,B和C,并且如果A发出消息,则A,B,C都将接收到消息。我不希望A收到自己的消息。
因此,我使用了各种解决方案,最好的解决方案是在传出消息上设置字符串属性,例如, source = myVeryOwnID。然后在MDB中,我设置了一个消息选择器,如来源<>'myVeryOwnID'。
不幸的是,这是一个糟糕的解决方案,因为我必须在源代码中设置此ID(在我的情况下,在注释中)。这意味着在部署新客户端时,我不能简单地将.EAR文件给予某人,而必须使用唯一的“源”属性专门重新编译。
理想情况下,我想使用MAC地址作为ID,或者Glassfish(我正在使用GFv3)内的ID设置。
任何解决方案或想法将不胜感激!
如果您使用glassfish,为什么'activemq'标签?您是否使用Glassfish JMS或ActiveMQ? – skaffman 2010-02-21 11:26:31
但是,您要部署相同的EAR三次还是一次? – ewernli 2010-02-21 12:48:02
skaffman:我很抱歉没有说清楚。我确实使用ActiveMQ,而不是与Glassfish捆绑在一起的OpenMQ。 ewernli:我希望三次部署相同的EAR。但是现在,我必须重新构建EAR(以确保源标识符不同)三次,然后进行部署。 – 2010-02-22 12:12:22