在ActiveMQ中针对消息的发送实现类似Queue的队列的一对多实现,保障在消息发送端发送消息,客户端中无论是否启动必须始终可以接收到发送端发送的数据的实现。
目前有两种思路:
1.将一对多的发送消息采用Queue的方式主要将一对多分解为多个点对点的Queue发送消息。
优点: 简单,容易实现,既保证消息发送的可靠性又实现了相关的功能。
缺点:不便于管理,但是比较占用宽带不利于在局域网或者广域网发送消息。
2.将一对多发送消息采用发布订阅模式(Topic)模式
需要将启动的时候事先进行消费者注册了持久订阅实现相关的功能,重写部分功能实现。
针对第二种方案怎么实现?请知道大侠,指点迷津,多谢了!
1、消息文件越来越多,导致超出了存储空间
报错日志:Usage Manager Store is Full, 100% of 1073741824. Stopping producer (ID:db01-48754-1336034955132-0:5:1:1) to prevent flooding queue://queue.land.group. See http://activemq.apache.org/producer-flow-control.html for more info (blocking for: 1s) | org.apache.activemq.broker.region.Queue | ActiveMQ Transport: tcp:///172.24.99.41:44716
这是由于我们在配置文件中设置了storeUsage ,当存储的消息文件(log文件)超过了这值就会报这个异常,在官方网站看到说消息文件不删除是5.3版本的一个bug,在5.5版本的时候已经被解决了,但是我们使用的是5.5.1版本啊,然后在看存储下来的消息文件,文件名不是连续的,那么说明其中还是有被删除的,后来在评论中看到Jeff Genender说的这个可能是ActiveMQ的线程调度问题,只要不使用线程调度就可以了,在broker中设置属性schedulerSupport=”false” ,这样消息文件就会自动在cleanup阶段删除了。