5.RabbitMQ 交换机与队列

消息生产者并不与队列产生交互,他所产生的消息全部会投递给交换机,然后交换机根据路由规则再将消息投递到不同的队列中。而后,消费者才可以在队列中读取消息。

1. 交换机

1.1. 交换机类型

1.1.1. fanout

fanout类型的交换机会把所有发送到该交换机的消息路由到所有与该交换机绑定的队列

1.1.2. direct

direct类型的交换机会把消息路由到BindingKey和RoutingKey完全相同的队列中

1.1.3. topic

topic类型的交换机使用的BindingKey是带有通配符的,其实就相当于sql中的like
由于使用了通配符,所以他有三个比较重要的符号 . * #

  • .
    因为这儿的通配符都是以单词为单位而不是字母为单位的,所以引入了.来分隔不同的单词
  • *
    匹配一个单词
  • #
    匹配0个到多个单词

1.1.4. headers

headers类型的交换机不依赖路由键来进行匹配,而是根据header里的键值对,如果键值对完全相同才会把消息路由到队列中

1.2. durable 交换机持久化

通过设置durable可以来让交换机持久化,这样交换机的信息就会持久化到硬盘,这样服务器重启的时候,交换机信息不会丢失

1.3. autoDelete 自动删除

自动删除设置,自动删除的触发条件是 有客户端连接到该交换机 然后所有跟该交换机绑定的交换机和队列全部解绑。而不是所有连接的客户端断开。

1.4. internal 内置

内置交换机,客户端无法连接到该交换机,但是客户可以通过别的交换机路由到该交换机

1.5. alternate-exchange 备份交换机

这是建立交换机的额外参数,参数值应为一个交换机名称,通过该参数可以为当前交换机建立一个备份交换机

2. 队列

2.1. durable 持久化

通过设置durable可以来让队列持久化,这样队列的信息就会持久化到硬盘,这样服务器重启的时候,队列信息不会丢失

2.2. autoDelete 自动删除

至少有一个客户端连接到该队列之后,所有连接到该队列的客户端全部断开后自动删除

2.3. TTL 队列过期设置

通关参数x-message-ttl可以为队列里的消息设置过期时间(毫秒),队列里的所有消息拥有相同的过期时间

2.4. 排他队列

只有在声明的时候通过指定exclusive参数来创建
如果设置为排他那么该队列仅对声明他的连接及该连接下的所有Channel可见,并在该连接断开时自动删除

2.5 死信队列 DLX

通过设置参数 x-dead-letter-exchange 来进行设置,值应该是一个队列的名字。
死信队列也是一种普通的队列,只是因为作用的问题被称为死信队列。
可以通过参数 x-dead-letter-routing-key 来为死信队列单独设置路由key,如果没有指定,那么将使用原队列的路由key

那么什么消息会进入死信队列呢

  • 消息被拒绝,且requeue参数为false
  • 消息过期
  • 队列达到最大长度

2.6 延迟队列

RabbitMQ本身不支持延迟队列,但是可以通过设置过期时间和死信队列来实现

生产者往带有过期时间的队列中发送数据,消费者在死信队列中获取消息进行处理

这样只有消息达到过期时间才会进入死信队列,消费者才能进行消费

2.7 优先级队列

通过设置参数 x-max-priority 来进行设置,该值为一个数字

优先级仅在消费速度跟不上生产速度,产生了数据堆积的情况下有效,不然生产一条消费一条也就没有优先级的概念

如果设置的消息的优先级超过最大优先级 那么会按照最大优先级处理

举个栗子,最大优先级为10 但是我们推送了部分优先级 11 12 13 14 的数据,那么 11 12 13 14会都按照10处理,他们会优先处理 但是可能是12优先于14

如果消息优先级小于0 那么也会采用相同的操作

3. 绑定

3.1 交换机和队列绑定

绑就完了

3.2 交换机和交换机绑定

绑就完了

RabbitMQ是一个流行的开源消息代理,它遵循AMQP协议。在RabbitMQ中,交换机(Exchange)和队列(Queue)是两个核心概念。交换机负责接收生产者发送的消息,并根据一定的规则将消息路由到队列队列则是用来存储消息的缓冲区,直到消费者来处理这些消息。 要创建交换机队列,你可以使用RabbitMQ的管理HTTP API,也可以通过RabbitMQ的命令行工具或通过支持RabbitMQ的客户端库(如Python的pika,Java的RabbitMQ.Client等)来实现。以下是使用命令行工具创建交换机队列的基本步骤: 1. 创建交换机: 使用`rabbitmqadmin`命令行工具,可以通过以下命令创建一个交换机: ``` rabbitmqadmin declare exchange name=<交换机名称> type=<交换机类型> ``` 其中`<交换机名称>`是你想要创建的交换机名称,`<交换机类型>`可以是direct、topic、fanout或headers等类型,决定了消息路由的方式。 2. 创建队列: 同样使用`rabbitmqadmin`命令行工具,可以创建一个队列: ``` rabbitmqadmin declare queue name=<队列名称> ``` `<队列名称>`是你想要创建的队列名称。 3. 绑定队列交换机: 创建了交换机队列之后,需要将它们绑定起来,以便消息能够从交换机路由到队列: ``` rabbitmqadmin declare binding source=<交换机名称> destination_type=queue destination=<队列名称> routing_key=<路由键> ``` 其中`<路由键>`是用来决定消息如何路由到队列的关键字,它会根据交换机类型和绑定时指定的键来决定消息是否会被路由到该队列。 注意,在使用这些命令之前,需要确保RabbitMQ服务正在运行,并且你有权限执行这些操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值