消息传递中间件解决方案(JMS,Tibco等)允许使用通配符进行“主题”过滤的发布/订阅以订阅特定“主题”的所有消息,例如, SUBSCRIBE(“ACCOUNT。*”)主题允许您订阅“ACCOUNT.WITHDRAW”消息和“ACCOUNT.CHECKBALANCE”消息。
问题是此类订阅还会收到我自己发布的消息。
我正在寻找一种机制,类似于UDP组播环回,可以通过传输层打开或关闭,而不会弄乱正在发送的数据。
是否有一种通用的,声明性的(没有自定义代码,仅配置)方式来配置中间件不接收同一服务实例已发布的消息?理想情况下,这也应该能够过滤掉同一“种类”的所有服务器(节点)发布的所有内容。
提前致谢。
答案 0 :(得分:1)
JMS API包含TopicSubscribers的此选项,例如TIBCO EMS让您使用“noLocal”属性创建消费者。这意味着没有在同一连接上发布的消息被同一连接上的客户端使用。
e.g。看一下如何使用“noLocal”选项创建主题订阅者: https://docs.tibco.com/pub/enterprise_message_service/7.0.1-march-2013/doc/html/tib_ems_api_reference/api/javadoc/javax/jms/TopicSession.html
答案 1 :(得分:0)
没有人在回答,所以我会以一种手动的方式发出声音。
我相信JMS spec中没有任何内容可以控制您是否在主题接收器上收到您自己发送的消息。因此,任何此类功能都将成为非便携式供应商功能。特别是对于您的第二个要求(基于JMS客户端的“种类”与基于发送/接收的相同连接的某些控制)。
如果您没有灵活性来修改代码或消息内容(属性),我认为您没有可移植的解决方案。对于第二种“善意”要求可能根本没有解决方案。
如果您想调查特定于供应商的选项,您需要告诉我们您感兴趣的供应商。您可能什么也得不到,但没有询问就没有办法知道。