第十章 高级特性-RabbitMQ消息可靠性投递+消费
第1集 高级知识点之RabbitMQ消息可靠性投递讲解
简介:Rabbitmq的消息可靠性投递讲解
-
什么是消息的可靠性投递
-
保证消息百分百发送到消息队列中去
-
详细
- 保证mq节点成功接受消息
- 消息发送端需要接受到mq服务端接受到消息的确认应答
- 完善的消息补偿机制,发送失败的消息可以再感知并二次处理
-
-
RabbitMQ消息投递路径
-
生产者-->交换机->队列->消费者
-
通过两个的点控制消息的可靠性投递
-
生产者到交换机
- 通过confirmCallback
-
交换机到队列
- 通过returnCallback
-
-
-
建议
- 开启消息确认机制以后,保证了消息的准确送达,但由于频繁的确认交互, rabbitmq 整体效率变低,吞吐量下降严重,不是非常重要的消息真心不建议用消息确认机制
第2集 新版RabbitMQ消息可靠性投递confirmCallback实战
简介:Rabbitmq的消息可靠性投递confirmCallback实战
-
生产者到交换机
- 通过confirmCallback
- 生产者投递消息后,如果Broker收到消息后,会给生产者一个ACK。生产者通过ACK,可以确认这条消息是否正常发送到Broker,这种方式是消息可靠性投递的核心
-
开启confirmCallback
xxxxxxxxxx
#旧版,确认消息发送成功,通过实现ConfirmCallBack接口,消息发送到交换器Exchange后触发回调
spring.rabbitmq.publisher-confirms=true
#新版,NONE值是禁用发布确认模式,是默认值,CORRELATED值是发布消息成功到交换器后会触发回调方法
spring.rabbitmq.publisher-confirm-type: correlated
-
开发实战
xxxxxxxxxx
@Autowired
private RabbitTemplate template;
?
@Test
void testConfirmCallback() {
?
template.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
/**
*
* @param correlationData 配置
* @param ack 交换机是否收到消息,true是成功,false是失败
* @param cause 失败的原因
*/
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
System.out.println("confirm=====>");
System.out.println("confirm==== ack="+ack);
System.out.println("confirm==== cause="+cause);
?
//根据ACK状态做对应的消息更新操作 TODO
}
});
template.convertAndSend(RabbitMQConfig.EXCHANGE_NAME+,"order.new","新订单来啦1");
}
-
模拟异常:修改投递的交换机名称
未完待续!!!(明天更新)