1

消息中间件解决方案(JMS、Tibco 等)允许通过“主题”过滤发布/订阅,使用通配符订阅某个“主题”的所有消息,例如 SUBSCRIBE("ACCOUNT.*") 主题允许您订阅两者“ACCOUNT.WITHDRAW”消息和“ACCOUNT.CHECKBALANCE”消息。

问题是这样的订阅也会收到我自己发布的消息。

我正在寻找一种机制,类似于 UDP 多播环回,它可以由传输层打开或关闭,而不会弄乱正在发送的数据。

是否有一种通用的声明性(无自定义代码,仅配置)方式来配置中间件不接收同一服务实例已发布的消息?理想情况下,这也应该能够过滤掉由相同“种类”的所有服务器(节点)发布的所有内容。

提前致谢。

4

2 回答 2

1

JMS API 包含TopicSubscribers 的这个选项,例如TIBCO EMS 让您创建一个具有“noLocal”属性的消费者。这意味着没有通过同一连接发布的消息被同一连接上的客户端使用。

例如,在这里查看如何使用“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

于 2014-11-28T22:03:52.840 回答
0

没有人回答,所以我会插话(以挥手的方式)。

我相信JMS 规范中没有关于控制您是否将自己发送的消息返回到主题接收器的任何内容。因此,任何像这样的功能都是不可移植的供应商功能。特别是对于您的第二个要求(基于“种类”的 JMS 客户端与基于执行发送/接收的相同连接的某些控制)。

如果您没有修改代码或消息内容(属性)的灵活性,我认为您没有可移植的解决方案。对于第二种“种类”要求,可能根本没有解决方案。

如果您想调查特定于供应商的选项,您需要告诉我们您对哪个供应商感兴趣。您可能一无所获,但不询问就无法知道。

于 2009-07-28T22:18:59.287 回答