目录
工作模式
简单模式
工作队列模式
发布订阅模式
路由模式
通配符模式
SpringBoot整合RabbitMQ
项目搭建
配置类中创建队列和交换机
编写生产者
编写消费者
消息的可靠性传递
死信队列
延迟队列
工作模式
RabbitMQ共有六种工作模式:简单模式(Simple)、工作队列模式(Work Queue)、发布订阅模式(Publish/Subscribe)、路由模式(Routing)、通配符模式(Topics)、远程调用模式(RPC,不常用,课程不对此模式进行讲解)
简单模式
特点:
- 一个生产者对应一个消费者,通过队列进行消息传递。
- 该模式使用direct交换机,direct交换机是RabbitMQ默认交换机。
工作队列模式
与简单模式相比,工作队列模式(Work Queue)多了一些消费者,该模式也使用direct交换机,应用于处理消息较多的情况。特点如下:
- 一个队列对应多个消费者。
- 一条消息只会被一个消费者消费。
- 消息队列默认采用轮询的方式将消息平均发送给消费者。
发布订阅模式
在开发过程中,有一些消息需要不同消费者进行不同的处理,如电商网站的同一条促销信息需要短信发送、邮件发送、站内信发送等。此时可以使用发布订阅模式(Publish/Subscribe)
特点:
- 生产者将消息发送给交换机,交换机将消息转发到绑定此交换机的每个队列中。
- 工作队列模式的交换机只能将消息发送给一个队列,发布订阅模式的交换机能将消息发送给多个队列。发布订阅模式使用fanout交换机。
- 发布订阅模式兼容工作队列模式,对个消费者可以监听同一条队列
路由模式
使用发布订阅模式时,所有消息都会发送到绑定的队列中,但很多时候,不是所有消息都无差别的发布到所有队列中。比如电商网站的促销活动,双十一大促可能会发布到所有队列;而一些小的促销活动为了节约成本,只发布到站内信队列。此时需要使用路由模式(Routing)完成这一需求。
特点:
- 每个队列绑定路由关键字RoutingKey
- 生产者将带有RoutingKey的消息发送给交换机,交换机根据RoutingKey转发到指定队列。路由模式使用direct交换机。
通配符模式
通配符模式(Topic)是在路由模式的基础上,给队列绑定带通配符的路由关键字,只要消息的RoutingKey能实现通配符匹配,就会将消息转发到该队列。通配符模式比路由模式更灵活,使用topic交换机。
通配符规则:
- 消息设置RoutingKey时,RoutingKey由多个单词构成,中间以.分割。
- 队列设置RoutingKey时,#可以匹配任意多个单词,*可以匹配任意一个单词。
- 路由关键字的特点为由多个单词组成,中间以.(点)隔开
SpringBoot整合RabbitMQ
项目搭建
配置类中创建队列和交换机
编写生产者
编写消费者
消息的可靠性传递
RabbitMQ消息投递的路径为:
生产者--->交换机--->队列--->消费者
在RabbitMQ工作的过程中,每个环节消息都可能传递失败,那么RabbitMQ是如何监听消息是否成功投递的呢?
- 确认模式(confirm):可以监听消息是否从生产者成功传递到交换机。
- 退回模式(return):可以监听消息是否从交换机成功传递到队列。
- 消费者消息确认(Consumer Ack):可以监听消费者是否成功处理消息。
死信队列
消息成为死信的情况:
- 队列消息长度到达限制。
- 消费者拒签消息,并且不把消息重新放入原队列。
- 消息到达存活时间未被消费。
延迟队列
延迟队列,即消息进入队列后不会立即被消费,只有到达指定时间后,才会被消费。
例如:用户下单后,30分钟后查询订单状态,未支付则会取消订单。
但RabbitMQ中并未提供延迟队列功能,我们可以使用死信队列实现延迟队列的效果。