RabbitMQ

一 .作用

(1)解耦:在项目启动之初是很难预测未来会遇到什么困难,消息中间件在处理过程中插入了一个隐含的,基于数据的接口层,两边都实现这个接口,这样就允许独立的修改或者扩展两边的处理过程,只要两边遵守相同的接口约束即可。

(2)冗余(存储):在某些情况下处理数据的过程中会失败,消息中间件允许把数据持久化

(3)扩展性:消息中间件解耦了应用的过程,所以提供消息入队和处理的效率是很容易的,只需要增加处理流程就可以了。

(4)削峰:在访问量剧增的情况下,但是应用仍然需要发挥作用,但是这样的突发流量并不常见。而使用消息中间件采用队列的形式可以减少突发访问压力,不会因为突发的超时负荷要求而崩溃

(5)可恢复性:当系统一部分组件失效时,不会影响到整个系统。消息中间件降低了进程间的耦合性,当一个处理消息的进程挂掉后,加入消息中间件的消息仍然可以在系统恢复后重新处理

(6)顺序保证:在大多数场景下,处理数据的顺序也很重要,大部分消息中间件支持一定的顺序性

(7)缓冲:消息中间件通过一个缓冲层来帮助任务最高效率的执行

(8)异步通信:通过把消息发送给消息中间件,消息中间件并不立即处理它,后续在慢慢处理。

(9)  AMQP:高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计


二 .执行过程

rabbitMQ架构

(1) .客户端连接到消息队列服务器,打开一个Channel。

(2) .客户端声明一个Exchange,并设置相关属性。

(3) .客户端声明一个Queue,并设置相关属性。

(4) .客户端使用Routing key,在Exchange和Queue之间建立好绑定关系。

(5) .客户端投递消息到Exchange

三 .队列模式

1.简单队列

2.Work模式

消费者1
消费者2

 说明 : channel.basicQos(1); 同一时刻服务器只会发送一条记录给消费者,体现work模式下的能者多劳

3.订阅模式

申明交换机类型时direct,发送消息key为 delete
消费者1 绑定到的是insert update delete 所以接受不到消息

说明 :一个生产者多个消费者;每个消费者都有自己的队列; 生产者将消息发送到交换机;每个队列都要绑定到交换机;生产者发送的消息经过交换机达到队列,实现一个消息被多个消费者获取;

4.路由模式

说明 :交换机模式为direct时生效;将队列绑定到交换机上同时赋予route_key; 将消息推送到交换机时 指定消息key;当route_key和消息key相同时,消息就会推送到指定队列

5.主题模式:将路由键和某模式进行匹配

绑定到交换机,赋予的route_key为 topic.l
接受topic.开头的消息

四 .sprigboot整合rabbitMQ

1. 在pom中导入meven依赖

2.在配置文件中添加rabbitMQ的配置信息

3.编写rabbitMQConfig类

交换机,队列,通过路由关键字进行绑定

4.定义消费者

@RabbitListener注解指定目标方法来作为消费消息的方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。