ActiveMQ是一个非常流行的消息队列服务中间件,基于JMS(Java Message Service)规范,并且它是一个纯Java程序,运行环境只需要Java虚拟机。
JMS规范定义了2类消息发送接收模型:点对点queue,发布订阅topic,区别是能够重复消费和是否保存。
1,点对点queue:不可重复消费,消息被消费前一直保存。
生产者发送消息到queue,一个消费者取出并消费消息。
消息被消费后,queue中不再保存,所有只有一个消费者能够取到消息。
queue支持多个消费者存在,但是一个消息只有一个消费者可以消费。
当前没有消费者时,消息一直保存,直到被消费者消费。
2,发布订阅topic:可重复消费,发布给所有订阅者。
生产者发布消息到topic中,多个订阅者收到并消费消息。
和queue不同,发布到topic中的消息会被所有订阅者消费。
当生产者发布消息时,不管是否有订阅者,都不保存消息。
JMS规范定义的2类消息传输模型queue和topic比较:
Queue |
Topic |
|
模型 |
点对点Point-to-Point |
发布订阅publish/subscribe |
有无状态 |
queue消息在消费前被一直保存在mq服务器上的文件或者配置DB |
topic数据默认不保存,是无状态的。 |
完整性保障 |
queue保证每条消息都被消费者接收到 |
topic不保证生产者发布的每条消息都被订阅者接收到 |
消息是否会丢失 |
生产者发送消息到queue,消费者接收到消息。如果没有消费者,将一直保存,不会丢失。 |
生产者发布消息到topic时,当前的订阅者都能够接收到消息。如果当前没有订阅者,该消息就丢失。 |
消息发布接收策略 |
一对一的消息发布接收策略,一个生产者发送的消息只被一个消费者接收。mq服务器收到回复后,将这个消息删除。 |
一对多的消息发布接收策略,同一个topic的多个订阅者都能收到生产者发布的消息。 |
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/187170.html