在介绍RabbitMQ的工作模式之前,需求了解RabbitMQ中的角色。因为工作模式中的一些概念和角色息息相关。
RabbitMQ中的角色
1. 生产者
与RabbitMQ建立连接后,向RabbitMQ发送消息的客户端,称为生成者,顾名思义,生成者主要是生产消息的。这里需要注意,生产这不是直接将消息发送到队列的,而是要经过Exchange(交换机),由Exchange交换机负责将消息发送到不同Queue(队列)。而Exchange模块是由Erlang语言编写的,该语言对于开发高并发和分布式应用具有天生的优势。
2. 消费者
消息生产出来,总得有人消费。而从队列中取消息的客户端,称之为消费者。
3. 无角色
RabbitMQ中还存在不生产消息,也不消费消息的角色,它的作用主要是用来声明组件。可以通过它创建自定义的交换机和队列。
简单模式
每一个队列,只被一个消费端监听,这种模式成为简单模式。
应用场景:发短信、发邮件。
争抢模式
一个队列,同时被多个消费者监听。
应用场景:秒杀、抢红包。
路由模式
前面简单模式和争抢模式,着重强调的是消费端。而路由模式,看到“路由”二字,大家也许会猜到,这个和交换机有关了。
路由模式指交换机通过消息的key将消息发送到指定的队列。
应用场景:
1.将手机号作为路由key ,将其发送到指定队列,由持有该手机号的客户端监听队列中的手机短信。
2.将系统的异常消息发送到指定队列,由负责日志记录的应用记录日志。
发布订阅模式
这里强调的也是交换机,将受到的消息发送给多个队列,而不单单指一个。
应用场景:短信群发、邮件群发。
主题模式
和路由模式很类似,区别在于主题模式的路由规则是通配匹配。指交换机通过消息的key将消息发送到某类队列中(类似于快递分拣)。
应用场景:物流分拣。
总结
五种工作模式中,前两种(简单模式、争抢模式)和消费者相关,后三种(路由模式、发布订阅模式、主题模式)和交换机相关。需要根据不同的场景使用不用的工作模式。