消息传递中间件解决方案(JMS、Tibco等)允许使用" topic“过滤的发布/订阅通过通配符订阅某个"topic”的所有消息,例如SUBSCRIBE("ACCOUNT.*") topic可以同时订阅"ACCOUNT.WITHDRAW“消息和"ACCOUNT.CHECKBALANCE”消息。
问题是,这样的订阅也会收到我自己发布的消息。
我正在寻找一种类似于UDP多播环回的机制,它可以由传输层打开或关闭,而不会扰乱正在发送的数据。
有没有一种通用的、声明性的(没有自定义代码,只有配置)的方法来配置中间件,使其不接收同一服务实例发布的消息?理想情况下,这也应该能够过滤掉所有相同“类型”的服务器(节点)发布的所有内容。
提前谢谢。
发布于 2009-07-28 22:18:59
没有人应答,所以我会插话(用手势)。
我相信在JMS spec中没有关于控制你是否在主题接收器上得到你自己发送的消息的东西。因此,像这样的任何功能都是不可移植的供应商功能。尤其是对于您的第二个需求(基于“种类”的JMS客户端与基于相同连接进行发送/接收的某种控制)。
如果您没有修改代码或消息内容(属性)的灵活性,我认为您就没有可移植的解决方案。对于第二个“种类”的需求,可能根本没有解决方案。
如果您想研究特定于供应商的选项,您需要告诉我们您对哪个供应商感兴趣。你可能什么也得不到,但没有办法不问就知道。
发布于 2014-11-29 06:03:53
JMS包含用于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
https://stackoverflow.com/questions/1190252
复制相似问题