RabbitQM(消息队列)
前言
简介:RabbitMQ 是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
AMQP,即 Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP 的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
使用场景:
1. 解耦:基于消息的模型,关心的是“通知”,而非“处理”。例如短信、邮件通知、缓存刷新等操作使用消息队列进行通知。
2. 异步提升效率:将不是必须的业务逻辑,异步处理。例如在用户注册系统,我们主要的业务逻辑就是把用户注册的信息进行持久化存储,而对于非主要业务进行异步处理(如消息通知),以提升用户注册响应。
3. 流量削峰:比数据库(mysql)写入速率快,并利用消息确认机制控制流量(并发)。
目录
一:消息中间件模型
二:模型图中的对象和属性
三:RabbitMQ常用命令
四:Spring Boot 之RabbitMQ示例
五:RabbitMQ 消息确认(ack)机制
六:RabbitMQ集群简介
https://github.com/374003909/RabbitQM/blob/master/src/main/java/com/example/RabbitQM/ack/AckSender.java
示例:接受 https://github.com/374003909/rabbitqm2/blob/master/src/main/java/com/example/rabbitqm2/direct/XxtzReceiver3.java
https://www.rabbitmq.com/tutorials/tutorial-six-java.html
https://www.zouyesheng.com/rabbitmq.html
https://blog.csdn.net/hellozpc/article/details/81436980
项目地址 : https://github.com/374003909/RabbitQM
四:分配策略
即队列中的消息如何分配给不同消费者,假设这样的场景,一个消息队列中有多条消息,rabbitQM服务器发现了一个消费者,它是一次性的把所有消息分配给该消费者呢?还是该消费者消费了一个消息(假设消费一个消息需要10秒钟)后在分配另一个消息呢?如果先发现一个消费者后又发现一个消费者怎么分配?如果一次发现多个消费者消息又如何分配呢?。。。。。
分配策略一:
分配策略二:
测试Spring Boot默认的分配策略?
场景一:一次性发现两(多)个消费者。
结论:消息队列中的消息平均分配给两个消费者,即一个消费者只消费偶数消息,另一个消费者只消费奇数消息
场景二: 一次性发现两(多)个消费者。在消费时其中一个消费者showdown了,怎么消费?
结论:
场景三:先发现一个消费者后又发现一个消费者,怎么消费?
结论:如果第一个消费者不死,第二个消费者不会消费到消息
分配策略小结:
真对Spring Boot的默认分配策略分析,rabbitqm服务器在分配队列中的消息时,会先查看监控该队列的消费者,然后制定分配策略。分配策略一旦制定如果消费者不出意外,就按这个策略执行。但如果消费者发生意外导致不能正确相应服务器(Message acknowledgment 策略)。先前分配给该消费者的消息会重新被rabbitqm服务器分配(即一种递归策略)
https://www.zouyesheng.com/rabbitmq.html
https://blog.csdn.net/hellozpc/article/details/81436980
项目地址 : https://github.com/374003909/RabbitQM
四:分配策略
即队列中的消息如何分配给不同消费者,假设这样的场景,一个消息队列中有多条消息,rabbitQM服务器发现了一个消费者,它是一次性的把所有消息分配给该消费者呢?还是该消费者消费了一个消息(假设消费一个消息需要10秒钟)后在分配另一个消息呢?如果先发现一个消费者后又发现一个消费者怎么分配?如果一次发现多个消费者消息又如何分配呢?。。。。。
分配策略一:
分配策略二:
测试Spring Boot默认的分配策略?
场景一:一次性发现两(多)个消费者。
结论:消息队列中的消息平均分配给两个消费者,即一个消费者只消费偶数消息,另一个消费者只消费奇数消息
场景二: 一次性发现两(多)个消费者。在消费时其中一个消费者showdown了,怎么消费?
结论:
场景三:先发现一个消费者后又发现一个消费者,怎么消费?
结论:如果第一个消费者不死,第二个消费者不会消费到消息
分配策略小结:
真对Spring Boot的默认分配策略分析,rabbitqm服务器在分配队列中的消息时,会先查看监控该队列的消费者,然后制定分配策略。分配策略一旦制定如果消费者不出意外,就按这个策略执行。但如果消费者发生意外导致不能正确相应服务器(Message acknowledgment 策略)。先前分配给该消费者的消息会重新被rabbitqm服务器分配(即一种递归策略)