RabbitMQ使用及其高级特征

使用

docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15672:15672 rabbitmq:management

端口(https://www.rabbitmq.com/networking.html ):

  • 5671、5672:AMQP端口
  • 15672:web管理后台端口
  • 4369,25672:Erlang发现&集群端口

架构

RabbitMQ

  • Broker:接收和分发消息的应用
  • Virtual Host:虚拟分组,不同的用户可以在不同的Virtual Host中创建 exchange/queue 等
  • Connection:publisher/consumer 和 broker 之间建立 TCP 连接
  • Channel:在 connection 内部建立的逻辑连接,通常每个thread创建单独的channel进行通讯,AMQP method包含channel id帮助客户端和message broker识别channel,所以channel之间是完全隔离的。Channel作为轻量级的Connection极大减少了操作系统建立TCP连接的开销

工作模式

简单模式

一个生产者、一个消费者,不需要设置交换机(使用默认的交换机)。

工作队列模式 Work Queue

一个生产者、多个消费者(竞争关系),不需要设置交换机(使用默认的交换机)。

发布订阅模式 Publish/subscribe

需要设置类型为 fanout 的交换机,并且交换机和队列进行绑定,当发送消息到交换机后,交换机会将消息发送到绑定的队列。

路由模式 Routing

需要设置类型为 direct 的交换机,交换机和队列进行绑定,并且指定routing key,当发送消息到交换机后,交换机会根据routing key将消息发送到对应的队列。

通配符模式 Topic

需要设置类型为 topic 的交换机,交换机和队列进行绑定,并且指定通配符方式的routing key,当发送消息到交换机后,交换机会根据routing key将消息发送到对应的队列。

高级特征

消息的可靠投递

消息发送确认

RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性(防止消息丢失或者投递失败的场景):

confirm:确认模式

使用rabbitTemplate.setConfirmCallback设置回调函数,当消息发送到exchange后回调confirm方法。

需开启发送回调publisher-confirm-type: SIMPLE

return:退回模式

使用rabbitTemplate.setReturnCallback设置退回函数,当消息从exchange路由到queue失败执行returnedMessage方法。

需开启消息路由失败回调publisher-returns: true

消息消费确认

消息消费确认模式有:

  • AcknowledgeMode.NONE:自动确认,consumer收到消息后自动将相应的message从RabbitMQ中移除
  • AcknowledgeMode.AUTO:根据情况确认
  • AcknowledgeMode.MANUAL:手动确认,调用channel.basicAck()手动签收

通过设置spring.rabbitmq.listener.direct.acknowledge-mode=MANUAL开启手动确认,调用basicAck方法确认签收消息,调用basicNack或basicReject,拒绝消息

消费端限流

通过channel.basicQos设置消费的大小和数量,注意需要开启消费端手动确认(acknowledge-mode=MANUAL)

TTL

通过参数x-message-ttl(整个队列)或expiration(单条消息)设置过期时间,到达过期时间没有被消费就会被清除

死信队列

Dead-Letter-Exchange(DLX)死信交换机,若消息绑定了死信交换机消息会在以下情况进入死信队列:

  • 消息长度达到限制
  • 消费者拒绝接受并且不重写入队
  • 到达过期时间未被消费

延迟队列

RabbitMQ中可以通过 TTL+死信队列 方式实现延迟队列效果

延迟队列

其它问题

  • 消息幂等:多次消费相同消息能得到相同的结果
  • 消息积压:增加消费者,或上线专门的消费服务将消息持久化再处理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值