Java 代码推送到activemq
activemq的两大特性,一对一和一对多。
一对一就是队列
一对多是主题,主题很好理解,微信公众号发布一个消息,就会推送给关注该公众号的用户群,即一对多
生产者生产了消息,然后启动消费者,监听一下,消费者就可以把消息消费掉
但是如果先启动两个消费者,再启动一个生产者,那么这两个消费者一人消费一半的消息,
如果先生产消息,然后先启动一个消费者,再启动另一个消费者,如果中间没有其他代码的话,后启动的那个消费者是拿不到消息的。
消费者消费消息有两种方式
1、有receive方法,是阻塞式的,在main方法里的话,就是程序不结束,如果一直有消息生产出来,那就一直消费,如果没有消息生产,就在这里阻塞住。为了防止阻塞,receive方法还可以传一个时间,意思是多长时间后程序结束。
2、监听式的消费者
-----
如果activemq不宕机的情况下
如果有多个消费者,如果消息已经生产好了,哪个消费者程序先启动,哪个消费者就去消费消息。
如果是多个消费者先启动,那么再启动生产消息的话,那么消费者们平均分消息去消费。
队列:
这块已经说的很明白了,topic的效率随着订阅者的数量,效率会降低,因为给一个人订阅,和一百万个人订阅,发布的时候量变引起质变。
topic是会丢消息的,而queue不会丢消息,这个也很容易理解,topic是消费者要先订阅,才能消费消息,换句话说,是要先启动消费者,再启动生产者生产消息,此时消息才会被消费者消费掉,而小启动生产者,生产一波消息,再启动消费者,消费者是拿不到消息的,而这时再生产一波消息的话,因为消费者已经启动了,所以才能拿到再生产的那一波消息。
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!