JMS消息在消费者处于集群环境下如何过滤重复数据

目前真实项目中遇到的问题,现在有个订单系统A负责接收来自淘宝,京东旗舰店上传过来的订单数据,进行订单数据验证过滤后将订单信息发布称jms的topic发布在MQ服务器上,有两个消息的监听系统分别为售后系统B和CRM系统C,B和C系统都部署在多个服务器节点集群环境下,原本打算从A来的消息后可以直接被B和C系统订阅,但是发现由于B,C的集群部署,导致集群中的每个节点都会收到同一条消息,请问各位大侠们,在遇到类似问题的时候都是怎样解决的

有人说是不用topic,而改用queue,但是这样导致每增加一个新的消息监听系统D的时候,A程序又要重新发布,而且消息在MQ服务器上保存多份(多个队列)

Topic一般不支持集群,用Queue。

谢谢Banq老师的回复
使用Queue的确能解决问题,这样感觉topic的功能挺鸡肋的,通常企业应用都会集群部署的,如果强行用topic又得让每个监听程序内部去做消息记录去重复的逻辑,不知有没有JMS消息服务器可以做到对topic进行分组的功能,只要在监听程序内部设置各自不同的group,然后监听同一个主题就得了,这样即利用了topic多播的优势,又能保证处于同一个group(应用集群)的topic消息只被处理一次--这个只是个人的想法,不知道有没有JMS服务器实现过类似的功能或者还有其他更便捷的方式

用阿里的rocketmq吧,或者用开源的metaq也可以。
https://github.com/alibaba/RocketMQ

高性能、分布式、拉取消息的模式、支持topic概念、支持生产者消费者集群,支持集群消费和广播消费两种模式(就是通过你说的分组的思想来实现),还支持broker的集群;
[该贴被tangxuehua于2013-12-18 00:35修改过]