rabbitmq消息可靠性之确认模式通俗易懂超详细内含案例(代码片段)

beixuan beixuan     2022-12-08     625

关键词:

RabbitMq保证消息可靠性之确认模式

前提

完成 SpringBoot 整合 RabbitMq 中的Topic通配符模式

一、更改Producer工程的application.yml文件

spring:
  rabbitmq:
    host: localhost
    port: 5672
    virtual-host: /
    username: username
    password: password
    publisher-confirm-type: correlated #开启确认默认
server:
  port: 8080

二、更改ProducerTest.java文件 ConfirmCallback


import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;

@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class RabbitMqTest 

    @Resource
    private RabbitTemplate rabbitTemplate;
    
    @Test
    public void test() throws InterruptedException 
        String body = "确认模式的消息";
        rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() 
            /**
             *
             * @param correlationData 配置信息
             * @param b 是否收到信息
             * @param s 失败的原因
             */
            @Override
            public void confirm(CorrelationData correlationData, boolean b, String s) 
                if (b)
                    log.debug("发送信息到交换机成功!");
                 else 
                    log.debug("发送信息到交换机失败:",s);
                   //第二次发送 rabbitTemplate.convertAndSend("topic_exchange","item.body",body);
                
            
        );
        //为了达到确认消息模式 
        //报出异常方法:【在消费端产生一个异常比如 100/0 就会触发 ConfirmCallback】
        rabbitTemplate.convertAndSend("topic_exchange","item.body",body);
        Thread.sleep(2000);
    

三、测试

首先运行 ProducerTest.java 单元测试,然后在启动 ConsumerListener.java 消息监听器

  1. 如果已经存在 topic_queue 请先删除后再执行单元测试

四、小结

第一次发送消息,发送消息时出现异常问题,就会调用到 ConfirmCallback 方法,会再次进行发送.保证消息的可靠性,不会丢失.

rabbitmq高级特性之延迟队列通俗易懂超详细内含案例

RabbitMq高级特性之延迟队列消息进入队列后不能立即被消费,到达指定时间后才可被消费实现结合以下两种即可达到延迟队列RabbitMq高级特性之TTL过期时间RabbitMq高级特性之DLX死信队列延迟队列小结延迟队列指消息进入队列后,经过... 查看详情

rabbitmq高级特性之死信队列通俗易懂超详细内含案例(代码片段)

RabbitMq高级特性之死信队列又称死信交换机DLX当消息成为Deadmessage后,会重新发送到另一个交换机,这个交换机就是DLX消息成为死信的情况公有三种:队列消息长度达到限制消费者拒接消费消息basicNack/basicReject,并且不把消息重新放回... 查看详情

rabbitmq高级特性之ttl存活时间/过期时间通俗易懂超详细内含案例(代码片段)

RabbitMq高级特性之TTL存活时间/过期时间每条消息设置过期时间整个Queue队列设置过期时间前提完成RabbitMq高级特性之消费端限流一、每条消息设置过期时间1.更改ProducerTest.java文件importlombok.extern.slf4j.Slf4j;importorg.junit.Test;importorg.juni... 查看详情

rabbitmq高级特性之消费端限流通俗易懂超详细内含案例(代码片段)

RabbitMq高级特性之消费端限流一丶首先部署SpringBoot框架完成SpringBoot整合RabbitMq中的Topic通配符模式二丶在resource资源文件夹里application.yml文件中添加配置spring:rabbitmq:listener:simple:acknowledge-mode:manual#开启手动签收prefetch:3#一次就收三... 查看详情

rabbitmq超详细学习笔记(章节清晰+通俗易懂)(代码片段)

...学习,最近花了一段时间系统学习了当下最为主流的RabbitMQ消息队列,学习过程中也随时记录,刚开始学习的时候懵懵懂懂,做的笔记都比较杂乱,系统学习完后我将笔记内容不断反复修改,对章节进行设... 查看详情

设计模式之单例模式(通俗易懂,超详细)

先上总结:单例模式就是在内存中只会创建且仅创建一次对象的设计模式,因为只创建一次对象,所以构造方法私有化,通过getInstence方法获取对象。单例模式分为懒汉式和饿汉式,懒汉式是在调用时创建对象,需要注意线程安... 查看详情

rabbitmq之消息模式简单易懂,超详细分享

前言上一篇对RabbitMQ的流程和相关的理论进行初步的概述,如果小伙伴之前对消息队列不是很了解,那么在看理论时会有些困惑,这里以消息模式为切入点,结合理论细节和代码实践的方式一起来学习。正文常用... 查看详情

节清晰+通俗易懂)(代码片段)

...学习,最近花了一段时间系统学习了当下最为主流的RabbitMQ消息队列,学习过程中也随时记录,刚开始学习的时候懵懵懂懂,做的笔记都比较杂乱,系统学习完后我将笔记内容不断反复修改,对章节进行设... 查看详情

13.rabbitmq消息可靠性投递confirm确认模式(代码片段)

...息丢失或者投递失败的现象;  RabbitMQ在消息投递可靠性方面给我们提供了两种模式;    1,confirm确认模式    2,return退回模式confirm确认模式介绍以及实现  confirm机制,消息的确认,是指... 查看详情

03rabbitmq进阶1之可靠性投递(代码片段)

目录Pt1可靠性投递Pt1.1可靠性风险Pt1.2保证生产者发送消息给Broker(1)事务模式(Transaction)(2)确认模式(Confirm)Pt1.3保证Exchange路由消息到队列(1)消息回发(2)消息路由到备份ExchangePt1.4保证消息在队列存储(1)Queue持久... 查看详情

rabbitmq消息可靠性的机制

RabbitMQ消息可靠性一、发布确认机制。生成者发送消息,Exchange路由消息到队列,RabbitMQ就会给生产者发送确认Ack。(注意:发布确认机制不能和事务机制一起使用)注意:多消息发布确认机制情况下,倘若要发送100条消息,发送... 查看详情

rabbitmq高级之如何保证消息发送可靠性(代码片段)

1.RabbitMq的发送机制学过RabbitMq的同学们大概都知道了RabbitMq发送机制引入了Exchange(交换机的概念),消息发送方,首先把消息发送到交换机这是第一个步骤,然后交换机在把消息路由到不同的队列中(Queue)这是第二个步骤,在有不同的消... 查看详情

节清晰+通俗易懂)(代码片段)

...学习,最近花了一段时间系统学习了当下最为主流的RabbitMQ消息队列,学习过程中也随时记录,刚开始学习的时候懵懵懂懂,做的笔记都比较杂乱,系统学习完后我将笔记内容不断反复修改,对章节进行设... 查看详情

rabbitmq可靠投递(代码片段)

...场景。RabbitMQ为我们提供了两个选项用来控制消息的投递可靠性模式。rabbitmq整个消息投递的路径为:producer->rabbitmqbrok 查看详情

如何保证消息队列的可靠性传输?

参考技术A消息丢失分成三种情况,可能出现生产者、RabbitMQ、消费者。首先要确保写入RabbitMQ的消息别丢,消息队列通过请求确认机制,保证消息的可靠传输。生产开启comfirm模式,在生产者开启comfirm模式之后,每次发送消息都... 查看详情

rabbitmq之消息可靠性死信交换机惰性队列及集群(代码片段)

文章目录一.消息可靠性1.生产者消息确认2.消息持久化3.消费者消息确认4.消费失败重试机制二.死信交换机1.死信2.TTL3.延迟队列三.惰性队列1.消息堆积问题2.惰性队列四.MQ集群1.集群分类2.普通集群3.镜像集群4.仲裁队列MQ的一些常... 查看详情

rabbitmq:第一章:6种工作模式以及消息确认机制(理论与代码相结合)(代码片段)

...xff0c;广播模式,路由模式,通配符模式,消息可靠性投递,防止消息丢失, 查看详情

近九万字图文详解rabbitmq

...tMQ(简单模式,广播模式,路由模式,通配符模式,消息可靠性投递,防止消息丢失,TTL,死信队列,延迟队列,消息积压,消息幂等性)一、项目代码1.生产者1.项目架构图:2.pom.xml依赖:3.spring-rabbitmq-producer.xml:4.rabbitmq.prop 查看详情