Springboot整合RabbitMQ高级篇

RabbitMQ高级篇

一、消息可靠性投递

在使用RabbitMQ的时候,作为消息发送方希望杜绝任何消息消失或者投递失败场景。RabbitMQ为我们提供了两种方式用来控制消息的投递可靠性模式。

消息传递机制:

​ 最多一次,一位消息有可能丢失

​ 最少一次,保证消息传递可靠,但可能冗余

​ 保证值成功一次,性能最差,消息成功传递,不冗余

消息投递步骤:

​ 生产者(channel)------->交换机------>队列

确保消息的可靠性投递,提供了如下的两种方式

​ confirm 确认模式

return 	 回退模式

(1)确认模式

# none:禁用发布确认模式
# correlated:发布消息成功到交换机后触发回调方法
# simple:有两种效果
	   (1)和CORRELATED值一样会触发回调方法
	   (2)在发布消息成功后使用rabbitTemplate调用waitForConfirms或			  waitForConfirmsOrDie方法等待broker节点返回发送结果,根据返回           结果来判定下一步的逻辑,要注意的点是waitForConfirmsOrDie方法如           果返回false则会关闭channel,则接下来无法发送消息到broker;

必须开启确认模式

# 端口号
server:
  port: 8087

spring:
  rabbitmq:
    host: 192.168.31.129
    # none:禁用发布确认模式
    # correlated:发布消息成功到交换机后触发回调方法
    # 开启rabbitMQ的生产方确认模式
    publisher-confirm-type: correlated

设置RabbitTemplate的确认回调函数

package com.hong;

import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * @Author hongCheng
 * @Date 2021/4/21 19:52
 * @Version 1.0
 */
@SpringBootTest
public class ConfirmModel {
   

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void testConfirm(){
   
        /**
         * 保证发送方到交换机的可靠性
         *      1.开启confirm模式,publisher-confirm-type:correlated
         *      2.设置rabbitTemplate的确认回调函数,如果消息到达交换机则返回true
         *      否则返回false
         */
        rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
   
            /**
             * correlationData 回调函数的相关数据
             * ack  自动确认
             * cause 原因如果存在,则为nack,否则null
             * @param correlationData
             * @param ack
             * @param cause
             */
            @Override
            public void confirm(CorrelationData correlationData, boolean ack, String cause) {
   
                if (ack==false){
   
                    System.out.println("继续发现消");
                    //取消订单
                }
            
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值