rabbitmq
什么是rabbitmq
mq全文Message Queue,中文为消息队列,消息队列是一种搞笑的异步通信机制,消息存储在队列里,可以让应用程序进行松耦合的通信,而rabbitmq是一种流行的开源消息队列软件,支持多种语言。
rabbitmq基本组成部分包含生产者、消费者、交换机、队列;生产者把消息发送到交换机,消费者监听队列,交换机是个路由器,他根据路由键把消息发送给指定的队列,队列是消息的存储库,每个队列都有一个名字,并且可以有多个消费者订阅他。
相关概念
上图是路由模式相关图。
标志 | 中文名 | 英文名 | 描述 |
---|---|---|---|
p | 生产者 | producer | 也叫发送方,负责把消费发送给交换机 |
c | 消费者 | consumer | 也叫接收方,负责监听并且消费队列里的消息 |
x | 交换机 | exchange | 也叫路由器,根据路由键把消息发送给队列 |
q | 队列 | queue | 也叫存储库,绑定交换机,负责存储生产者发送的消息 |
交换机主要有以下几种:
- Direct Exchange:是一种最简单,最常见的Exchange类型,他根据消息的Routing key将消息路由到与之完全匹配的队列中,Routing key必须是一个字符串,同时也必须在对应的Queue绑定时指定。
- Fanout Exchange:将从Exchange接受到的消息广播到与之绑定的所有队列中,他忽略Routing key,只需将消息发送到与之绑定的所有队列即可,既发布订阅模式。
- Topic Exchange:是一个更加灵活的Exchange类型,他可以使用通配符将消息路由到多个Queue中。
- Headers Exchange: 使用消息头中的键值对来进行匹配,性能比其他类型的 Exchange 要差,因此一般情况下会尽可能避免使用它。
除了上面主要几种,还有一种经常被大家忽视的概念Default exchange binding,在RabbitMQ中,如果一个消息发送到Exchange中没有指定任何的规则,那么这个消息就会路由到名为Default exchange binding的默认Exchange中。这个默认 Exchange 的名称为“”(空字符串),也称为 AMQP default exchange。
默认情况下,每个Queue都会与默认Exchange绑定,绑定规则为将Queue的名称作为Routing key,意味着,如果发布消息不指定Exchange的名称,也就是不指定为rect Exchange或者Fanout Exchange,那么就会发送到默认的Exchange中,并根据Routing key路由到与之同名的Queue中。
rabbitmq基本使用
https://gitee.com/kangyu01/test-rabbitmq
7种模式
简单模式、工作模式、发布订阅、路由、主题topic、RPC、Publisher Confirms
用rabbitmq有什么好处
对比同种类型的产品
高级特性和应用案例
疑问点?
- 在 RabbitMQ 中,是队列绑定交换机,还是交换机绑定队列?
在 RabbitMQ 中,队列绑定到交换机上,而不是交换机绑定到队列上。这是因为 RabbitMQ 的消息路由模型是基于 Exchange - Queue 绑定实现的。
具体来说,当我们在 RabbitMQ 中创建一个队列时,该队列默认不会自动与任何 Exchange 进行绑定。如果我们想要将某个队列与一个 Exchange 进行绑定,需要创建一个 Binding(即绑定关系),用于将 Exchange 和 Queue 连接起来。
Binding 有三个必填参数,分别为 Destination(目标队列名)、Source(源 Exchange 名称)以及 Routing Key。其中 Destination 指的是队列名称,Source 指的是 Exchange 名称,而 Routing Key 则用于标识消息应该路由到哪个队列中。
在创建 Binding 时,也可以指定一些可选参数,如 Arguments。Arguments 是一个键-值对集合,可以被用来配置和控制 RabbitMQ 的各种行为,比如消息的过期时间、队列的最大长度、死信路由等。通过配置这些参数,我们可以更好地控制 RabbitMQ 在消息路由和处理方面的行为。
总之,在 RabbitMQ 中,由于消息是从 Exchange 发布并路由到队列中,所以我们需要先将队列绑定到 Exchange 上,才能够确保消息能够被正确地路由到目标队列中。 - RabbitMQ中,消息是从交换机中推送给队列的,还是队列从交换机中取出来的
在 RabbitMQ 中,消息是由生产者发布到交换机(Exchange),然后由交换机将消息路由(Routing)到一个或多个绑定的队列(Queue)。当消息被发送到交换机时,交换机会根据规则将消息路由到与其绑定的队列,然后将消息推送给相应的队列。因此可以说是消息从交换机中推送给队列的。同时,消费者通过订阅队列来获取消息,等待队列有消息时,才会将消息取出来进行消费处理。