queue和topic消息发送接收模型是什么
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的多个订阅者都能收到生产者发布的消息。 |