rabbitmq 连接失败捕获_RabbitMQ的一些实践总结

MQ使用场景

  1. 流程异步化

  2. 业务解耦

  3.  流量削峰填谷

RabbitMQ核心概念

先来看一眼rabbitMQ的架构图:

f6c6cb51dd075ea4948a20fc6ea7b00f.png

  1. broker:接受客户端连接,实现AMQP协议。

  2. connection:和具体broker建立网络连接。

  3. channel:逻辑概念,几乎所有操作都在channel中进行,channel是消息读写的通道,一个connection可以建立多个channel。

  4. message:应用程序和broker之间传递的数据,由properties和body组成。properties可以对消息进行修饰,比如消息的TTL,correlationId等高级特性;body是消息实体内容。

  5. Virtual host:虚拟主机,用于逻辑隔离,最上层消息的路由。一个Virtual host可以若干个Exchange和Queue,同一个Virtual host不能有同名的Exchange或Queue。

  6. Exchange:交换器,接受消息,根据路由键转发消息到绑定的队列上。

  7. binding:Exchange和Queue之间的绑定关系,告诉exchange把消息路由到哪个队列

  8. routing key:exchange结合routing key来确定如何路由一条消息。

  9. Queue:消息队列,用来存放消息的队列。

消息确认机制

结合上图中消息发送的链路, 我们可以看出一条消息发出去后可能在哪些环节出问题:

  1. Producer发出后由于网络故障Broker没有收到

  2. Producer发出后Broker宕机导致消息丢失

  3. Broker发送给Consumer后由于网络故障Consumer没有收到

  4. Broker发送给Consumer后Consumer宕机导致没有处理

RabbitMQ提供了发布者确认和消费者确认机制来解决这些问题,发布者确认是指Broker收到Producer的消息后,会给Producer发送一条确认消息,如果消息的durable属性为
true, Broker会等消息成功持久化到磁盘后再发送publisher-confirm,发布者确认是异步的,不会影响发布的性能;消费者确认是指消费者收到消息后需要发送一条确认消息给
broker(可以开启自动确认模式,但可能丢消息),broker如果没有收到consumer的确认,会把消息重发.

生产者增加确认机制非常简单,channel开启confirm模式,然后增加监听, 如果使用的spring-rabbit框架, 把connection-factory的publisher-confirms配置为true,
并在RabbitTemplate配置一个confirm-callback的Listener:

123
"rabbitConnectFactory"  publisher-confirms="true"/>"confirmCallback" class="com.xxx.MessageConfirmCallback"/>"rabbit
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值