一、workqueues

多个消费者监听同一个队列,提高处理速度

相比简单模式多加了消费者,类似于分布式,加快了处理消息的速度

RabbitMQ-2-工作模式及参数配置

实际项目只声明一次队列,一般声明在消费者,因为消费者是一直运行的,不能关闭资源

代码加一个消费者,就是复制一份消费者类即可,偶数就平均分配,奇数就一边2个一边3个

二、publish/subscribe发布订阅(又叫扇出模式)

将一个交换机里面的消息给多个队列,(消息同时发送到邮件队列和短信队列,两个消费者,一个监听邮件,一个监听短信(sms:short messaging service)

RabbitMQ-2-工作模式及参数配置

类似于建两个最简单的场景,只不过要发两遍消息,而上面的只需要发一次消息

RabbitMQ-2-工作模式及参数配置

2.1 交换机

不同于简单模式,发布订阅要自定义交换机,类似于定义队列我们也定义在消费者;不写路由,路由为""

交换机有两个参数,一个是名字,一个是交换机的类型,发布订阅模式就是FANOUT(扇出,用的枚举)

RabbitMQ-2-工作模式及参数配置

2.2 绑定交换机和生产者

因为没有路由,把交换机和队列绑上即可,它会把消息发送到所有队列,没有路由还是惯例写""

RabbitMQ-2-工作模式及参数配置

三、Routing(路由模式)

队列和交换机绑定在一起,消息根据路由发送到指定队列

RabbitMQ-2-工作模式及参数配置

3.1 交换机和队列绑定路由

RabbitMQ-2-工作模式及参数配置

RabbitMQ-2-工作模式及参数配置

四、Topic(通配,以后都用这种)

解决有些消息既要进消息队列,又要进短信队列

RabbitMQ-2-工作模式及参数配置

定义路由的通配规则

RabbitMQ-2-工作模式及参数配置

RabbitMQ-2-工作模式及参数配置

这种两个队列都会进

RabbitMQ-2-工作模式及参数配置

五、消息属性

生产者,注意这里的过期时间是字符串

RabbitMQ-2-工作模式及参数配置

消费者都取得到

RabbitMQ-2-工作模式及参数配置

六、消息确认机制

为保证消息在发送和处理时消息不丢失

​ 生产者发送消息,有确认机制

​ 消费者处理消费,有确认机制

6.1 生产端确认机制

6.1.1 生产者确认

监听要开一个线程

RabbitMQ-2-工作模式及参数配置

注意:要监听确认发送了消息,连接不能关闭

RabbitMQ-2-工作模式及参数配置

RabbitMQ-2-工作模式及参数配置

RabbitMQ-2-工作模式及参数配置

6.1.2 return机制

如果路由不到,返回监听信息,也是消息传递失败

RabbitMQ-2-工作模式及参数配置

没发到信息,要在handleReturn里面进行记日志,记录数据库或人工干预等等

6.2 消费端确认机制(ACK和限流)

消费者确认机制:自动确认,手动确认

​ 自动:

​ 手动:

6.2.1 消费者确认

限流一般和ack一起用:

​ 限流一般一次一个,多个消费者谁快谁处理的消息多

​ 自动确认改为false

​ 最后要执行.basicAck才算处理信息结束,否则消息还会给你退回来,保证消息不丢

RabbitMQ-2-工作模式及参数配置

6.2.2 NACK重回队列

消费者处理失败NACK

try{

​ ack();

}catch(){

​ //处理失败,nack()

​ 可以重回队列

​ 可以不重回队列

​ 消息丢失

​ 有死信队列进入死信队列,没有死信队列消息丢失

​ nack();

}

消息直接丢失可以解决,进入死信队列,下面详讲

RabbitMQ-2-工作模式及参数配置

还有一种处理办法,就是消息拒绝,拒绝后消息也会丢失,让处理失败的信息不丢失,解决方法也是死信队列

少了个批量处理的参数,默认一次处理一个

RabbitMQ-2-工作模式及参数配置

七、队列属性

所有消息的过期时间不是字符串,为数字类型

RabbitMQ-2-工作模式及参数配置

八、死信队列

RabbitMQ其实应该叫死信交换机,沿用其他消息队列的概念

8.1 什么是死信

满足以下条件的消息,都会进入死信队列

RabbitMQ-2-工作模式及参数配置

8.2 死信测试

RabbitMQ-2-工作模式及参数配置

RabbitMQ-2-工作模式及参数配置

8.2.1 先搭建一个接受消息的交换机和队列

RabbitMQ-2-工作模式及参数配置

8.2.2 搭建死信交换机和死信队列

RabbitMQ-2-工作模式及参数配置

8.2.3 绑定死信交换机和队列

其实就是设置普通队列的两个属性

RabbitMQ-2-工作模式及参数配置

8.2.4 再建一个消费者来专门处理死信队列

九、死信队列实现延迟队列

处理秒杀经典案例:下的订单都放到订单队列,设定过期时间,没有消费者处理它,等到过期时间全部进入死信队列,然后处理死信队列,处理过的消息再进行redis内订单操作

RabbitMQ-2-工作模式及参数配置

相关文章: