高效处理消息:使用Spring Boot实现消息重试机制

当涉及到消息发送和接收的可靠性,Spring Boot提供了一些机制来确保消息的可靠传递。其中包括消息确认机制和重试机制。下面是一个示例代码,演示如何在Spring Boot中实现可靠的消息发送和接收。

首先,我们需要配置RabbitMQ的连接信息和相关属性。在application.properties文件中添加以下配置:

# RabbitMQ连接配置
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest# 消息重试配置
spring.rabbitmq.listener.simple.retry.enabled=true
spring.rabbitmq.listener.simple.retry.max-attempts=3
spring.rabbitmq.listener.simple.retry.initial-interval=5000
spring.rabbitmq.listener.simple.retry.multiplier=2

接下来,我们创建队列、一个消息发送者(Producer)和一个消息接收者(Consumer)的示例代码。

定义队列示列代码:

@Configuration
public class RabbitMQConfig {

 @Bean
    public Queue fanout_queue_email() {
        return new Queue("fanout_queue_email");
    }
}

Producer(消息发送者)示例代码:

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MessageProducer {

    private final RabbitTemplate rabbitTemplate;

    @Autowired
    public MessageProducer(RabbitTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
    }

    public void sendMessage(String message) {
        rabbitTemplate.convertAndSend("fanout_queue_sms", message);
        System.out.println("消息发送成功:" + message);
    }
}

在上面的代码中,我们注入了RabbitTemplate对象,它是Spring Boot提供的用于发送消息的工具类。通过调用rabbitTemplate.convertAndSend()方法发送消息到名为fanout_queue_sms的队列

Consumer(消息接收者)示例代码:

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class MessageConsumer {

    @RabbitListener(queues = "fanout_queue_sms")
    public void receiveMessage(String message) {
        System.out.println("接收到消息:" + message);
        // 模拟处理消息的业务逻辑
        processMessage(message);
    }

    private void processMessage(String message) {
        // 模拟业务处理耗时
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 手动抛出异常,触发消息重试
        if (message.contains("error")) {
            throw new RuntimeException("处理消息失败");
        }
        System.out.println("消息处理成功:" + message);
    }
}

在上面的代码中,我们使用@RabbitListener注解标记receiveMessage()方法,表示它是一个消息监听器,监听名为fanout_queue_sms的队列。当接收到消息时,会触发receiveMessage()方法进行处理。

processMessage()方法中,我们模拟了业务处理的耗时,并通过手动抛出异常的方式触发消息重试机制。如果消息处理失败,将会抛出运行时异常,触发Spring Boot的重试机制。

调用示例代码:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class MessageApplication {

    public static void main(String[] args) {
        // 启动Spring Boot应用
        ConfigurableApplicationContext context = SpringApplication.run(MessageApplication.classargs);

        // 获取MessageProducer Bean
        MessageProducer producer = context.getBean(MessageProducer.class);

        // 发送消息
        producer.sendMessage("Hello, World!error");
    }
}

运行效果如下:

alt

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/364.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java】JVM学习(一)

JVM是一种规范 Java程序的执行过程 一个 Java 程序,首先经过 javac 编译成 .class 文件,然后 JVM 将其加载到方法区,执行引擎将会执行这些字节码。执行时,会翻译成操作系统相关的函数。JVM 作为 .class 文件的翻译存在&#xff…

Flutter 设置自定义字体

一般我们会在 assets 文件夹下新建一个 font 的文件夹,然后把字体拖动到 font 文件夹中,如下图所示 然后在 pubspec.yaml 配置文件中新添加如下内容 fonts:- family: Impactfonts:- asset: assets/font/IMPACT.TTF 最后字体使用 Text( "自定义字体…

基于深度学习的高精度烟雾检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度烟雾检测识别系统可用于日常生活中或野外来检测与定位烟雾目标,利用深度学习算法可实现图片、视频、摄像头等方式的烟雾目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

天津大学天津市认知计算与应用重点实验室视听觉认知计算团队12篇论文被语音处理顶会Interspeech 2023接收

天津大学天津市认知计算与应用重点实验室视听觉认知计算团队12篇论文被语音技术顶会Interspeech 2023接收,涵盖意图识别、口语理解、声学特征、语音识别、语音分离、情感识别等研究方向,论文简介如下。 01. Rethinking the visual cues in audio-visual…

最新ai创作系统CHATGPT镜像系统源码+支持GPT4.0+支持ai绘画(MJ)+实时语音识别输入+免费更新版本

AI系统CHATGPT镜像程序源码支持GPT4支持ai绘画实时语音识别输入免费更新版本 一、AI创作系统二、系统介绍三、系统程序下载四、安装教程五、主要功能展示六、更新日志 一、AI创作系统 1、提问:程序已经支持GPT3.5、GPT4.0接口、支持新建会话,上下文记忆…

PyGame游戏编程

Python非常受欢迎的一个原因是它的应用领域非常广泛,其中就包括游戏开发。而是用Python进行游戏开发的首选模块就是PyGame。 1. 初识Pygame PyGame是跨平台Python模块,专为电子游戏设计,包含图像、声音等,创建在SDL(…

【GESP】2023年06月图形化二级 -- 时间规划

文章目录 时间规划【题目描述】【输入描述】【输出描述】【参考答案】其他测试用例 时间规划 【题目描述】 默认小猫角色和白色背景,小明在为自己规划学习时间。现在他想知道两个时刻之间有多少分钟。你能通过编程帮他做到吗? 【输入描述】 新建变量“…

数据结构-哈希-位图与布隆过滤器

位图与布隆过滤器 一,位图题目分析位图设计位图代码经典题目 二,布隆过滤器布隆过滤器概念布隆过滤器的插入布隆过滤器的结构布隆过滤器总结经典题目 三,哈希切割 一,位图 题目分析 🚀给40亿个不重复的无符号整数&am…

设计模式之策略模式笔记

设计模式之策略模式笔记 说明Strategy(策略)目录策略模式示例类图抽象策略类策略A类策略B类策略C类促销员类测试类 说明 记录下学习设计模式-策略模式的写法。JDK使用版本为1.8版本。 Strategy(策略) 意图:定义一系列的算法,把它们一个个封装起来,并且…

Uncaught TypeError: Illegal invocation

使用console.time报错 console.time将在当前对象(即支持)的上下文中执行,发现一些老的chrome版本中,上下文可能有问题. 解决: 可以使用 console.time.call(window,1111)

把网页地址中的url的参数转化为obj

1.例子: var str"http://www.hqyj.com/index.html?uid123&page19&dt20230407&namekaren" 2.代码: var str"http://www.hqyj.com/index.html?uid123&page19&dt20230407&namekaren"function fn (str) {var arr1str.split("…

opencv编译

文章目录 一、编译前工作二、编译安装1、Windows2、Linux 一、编译前工作 进入下载页面https://github.com/opencv/opencv,下载指定.tar.gz源码包,例如:opencv-4.7.0.tar.gz。解压到指定目录。 二、编译安装 opencv构建时,需要…