RabbitMQ是基于Erlang语言开发的开源消息通信中间件,支持AMQP、XMPP、SMTP、STOMP通信协议,其架构如下图所示:
基于以上架构,RabbitMQ消息队列有五种常用的应用模式:
- 简单模式
作用:生产者直接发送消息至队列,消费者直接从队列中获取消息。
- 工作队列模式【Work Queues】
作用:生产者还是直接将消息发送至队列,此时有多个消费者,根据每个消费者处理消息能力的高低进行消费。
- 发布订阅模式【Publish/Subscribe】
作用:生产者将消息发送至交换机,交换机会绑定多个消息队列,此时会将消息群发至每个队列中,让每个队列的消费者都能收到消息。
注意:因为交换机只有消息转发功能,不能存储消息,因此如果交换机未绑定任何消息队列,会导致消息丢失。
- 路由模式【Routing】
作用:生产者将消息发送至交换机,并指定一个路由键(Routing Key)。消费者在创建队列(Queue)时也指定一个或多个路由键,并且将队列绑定到交换机上。只有当消息的路由键与队列绑定的路由键完全匹配时,消息才会被发送到相应的队列中。
- 主题模式【Topics】
作用:生产者将消息发送至交换机,并指定一个路由键(Routing Key)。但是消费者在创建队列时,可以使用一种称为“主题”的模式来绑定队列到交换机。主题模式允许使用通配符来匹配路由键,这样可以更加灵活地控制消息的传递。