rocketmq实现延迟消息

SpringBoot整合RocketMQ发送延时消息

springboot rocketmq 延迟消息

Windows下RocketMQ安装及可视化界面搭建

Java 客户端

RocketMQ延迟消息

项目背景

项目中有延时消息的需求,综合考量RocketMQ比较适合。

  • RocketMQ支持多维度的延迟级别

  • 支持多种消息类型

  • 基于分布式架构时间高可用

  • 有重试机制

  • 高吞吐量,流处理

基本使用

依赖

<!--rocketMq依赖-->
<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-spring-boot-starter</artifactId>
    <version>自己选择版本</version>
</dependency>

配置

#这两个是必须配置项
rocketmq:
  name-server: localhost:9876
  producer:
    group: xxx

生产者

@Data
@Component
@ConfigurationProperties(prefix = "mq")
public class MqConfig {

    /**
     * 是否开启mq延迟消息
     */
    private Boolean enabled;

    /**
     * 缺货mq主题
     */
    private String topic = "topic";

    /**
     * 发送超时时间,单位:毫秒(ms)
     */
    private Long timeout = 3000L;

    /**
     * 延时级别为(1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h)其下标,从1开始
     */
    private Integer delayLevel = 3;
}
@Component
@Slf4j
public class Producer {
    
    @Autowired
    private MqConfig mqConfig;
    
    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    /**
     * 发送延迟消息
     * @param msg
     */
    public void sendScheduleMsg(String msg) {
        Message<String> message = MessageBuilder.withPayload(msg).build();
        String topic = mqConfig.getTopic();
        SendResult sendResult = rocketMQTemplate.syncSend(topic, message, mqConfig.getTimeout(), mqConfig.getDelayLevel());
        if (SendStatus.SEND_OK.equals(sendResult.getSendStatus())) {
            log.info("【sendScheduleMsg】 发送延迟[{}]消息[{}]成功", topic, msg);
        } else {
            log.warn("【sendScheduleMsg】 发送延迟[{}]消息[{}]失败", topic, msg);
        }
    }
}

消费者

@Component
@RocketMQMessageListener(consumerGroup = "group", topic = "topic")
@Slf4j
public class Consumer implements RocketMQListener<MessageExt> {

    @Override
    public void onMessage(MessageExt messageExt) {
        String msg = new String(messageExt.getBody(), StandardCharsets.UTF_8);
        log.info("收到延迟消息:{}", msg);
    }
}

可以看到broker是收到数据的
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows安装PostgreSQL常见问题总结解决

1.用户权限不足/未关闭防火墙&杀毒软件 1.1.数据库初始化错误 1.2.SQL模块没有成功加载到数据簇 在安装PostgreSQL时&#xff0c;我们可能会遇到1.1和1.2的情况&#xff0c;其实这两个为一类问题&#xff0c;即安装权限不足。首先检测自己的用户是不是本地组Administrator再…

使用 Windbg 分析软件异常时的诸多细节与技巧总结

目录 1、dump文件 1.1、dump文件的生成方式 1.2、dump文件的大小 2、pdb符号文件 2.1、pdb文件的路径设置 2.2、pdb文件的时间戳与名称问题 2.3、如何确定要找哪些pdb文件&#xff1f; 3、使用Windbg静态分析dump文件以及动态调试程序的一般步骤 4、确定发生异常或崩溃…

Vue中的class和style绑定

聚沙成塔每天进步一点点 本文内容 ⭐ 专栏简介动态绑定class对象语法数组语法 动态绑定style对象语法多重值 ⭐ 写在最后 ⭐ 专栏简介 Vue学习之旅的奇妙世界 欢迎大家来到 Vue 技能树参考资料专栏&#xff01;创建这个专栏的初衷是为了帮助大家更好地应对 Vue.js 技能树的学习…

Provide/Inject 依赖注入(未完待续)

父组件传递给子组件数据&#xff0c;通过props&#xff0c;但是需要逐层传递 provide/Inject 的推出就是为了解决这个问题&#xff0c;它提供了一种组件之间共享此类值的方式,不必通过组件树每层级显示地传递props 目的是为了共享那些被 认为对于一个组件树而言是全局的数据 p…

MulticoreWare与Imagination一同按下汽车计算工作负载的“加速键”

中国北京 – 2024年1月8日 - MulticoreWare Inc与Imagination Technologies共同宣布已在德州仪器TDA4VM处理器上实现了GPU计算&#xff0c;不仅使算力提升了约50 GFLOPS&#xff0c;而且还实现了自动驾驶和高级驾驶辅助系统&#xff08;ADAS&#xff09;常见工作负载性能的跃升…

MySQL 从零开始:03 基本入门语句

文章目录 1、连接数据库1.1 命令提示符登陆1.2 MySQL 8.0 Command Line Client 登陆1.3 MySQL Workbench 登陆 2、基本语句2.1 查看所有库2.2 创建库2.3 删除库2.4 选择数据库2.5 查看表2.6 创建表2.7 删除表2.8 改表名2.9 清空表 在上一小节中介绍了 MySQL 数据库的安装&#…

【Win10安装Qt6.3】安装教程_保姆级

前言 Windows系统安装Qt4及Qt5.12之前版本和安装Qt.12之后及Qt6方法是不同的 &#xff1b;因为之前的版本提供的有安装包&#xff0c;直接一路点击Next就Ok了。但Qt5.12版本之后&#xff0c;Qt公司就不再提供安装包了&#xff0c;不论是社区版&#xff0c;专业版等&#xff0c…

羌族特色民居----碉楼

羌族是四川的一个少数民族&#xff0c;他们独具特色的民居就是----碉楼。在羌语中&#xff0c;碉楼被称为“邓笼”&#xff0c;意为美丽、高贵的房子&#xff0c;羌族人有“依山而居&#xff0c;垒石为屋&#xff0c;高者十余丈”的习俗。碉楼的高度在十米至三十米之间。用于御…

飞腾FT2000-4/D2000-8 VPX主板

产品特点 ①国产飞腾FT2000-4或D2000-8处理器 &#xff0c;同一模块兼容两种处理器&#xff0c;可以根据性能需要选择 ②丰富的万兆以太网、千兆以太网、USB、SATA接口&#xff0c;可用作数据处理、存储、通信服务器 ③内部集成FPGA-V7协处理器&#xff0c;支持SRIO、LVDS等…

k8s的存储卷、数据卷

容器内的目录和宿主机目录进行挂载。 容器在系统上的生命周期是短暂的。 k8s用控制器创建的pod。delete相当于重启。容器的状态也会恢复到初始状态。一旦恢复到初始状态&#xff0c;所有的后天编辑的文件都会消失 容器和节点之间创建一个可以持久化保存容器内文件的存储卷。…

详解JavaScript中的WeakMap和WeakSet

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》 ​ ​ ✨ 前言 内存管理一直是JavaScript这门语言中的难点和痛点。由于其自动垃圾回收机制的限制,在某些场…

Kettle Local引擎使用记录(一)(基于Kettle web版数据集成开源工具data-integration源码)

Kettle Web &#x1f4da;第一章 前言&#x1f4da;第二章 demo源码&#x1f4d7;pom.xml引入Kettle引擎核心文件&#x1f4d7;java源码&#x1f4d5; controller&#x1f4d5; service&#x1f4d5; 其它&#x1f4d5; maven settings.xml &#x1f4d7;测试&#x1f4d5; 测试…

Opencv实验合集——实验七:二维码和条形码匹配

1.概念 二维码&#xff08;QR码&#xff09; 概念&#xff1a; 二维码是一种矩阵式的二维条码&#xff0c;由黑白方块组成&#xff0c;可以存储大量的信息&#xff0c;包括文本、链接、数字等。QR码的编码方式是在矩阵中通过不同的黑白方块组合表示不同的信息。 特点&#xf…

PHP开发日志 ━━ 不同方法判断某个数组中是否存在指定的键名,测试哪种方法效率高

我们可以用isset($arr[a]) 或者 array_key_exists(a, $arr) 来判断a键名是否存在与$arr数组。 那么这两种方式哪个运行速度快呢&#xff1f; 不多废话了&#xff0c;现在我们写一段代码来测试一下&#xff1a; $array [a > 1, b > 2, c > 3];$start microtime(tru…

图像去雨-雨线清除-图像处理(计算机视觉作业-附代码)

图像去雨是一种图像处理技术&#xff0c;可以通过算法的方式去除图像中的雨滴或雨线等噪声。在实际应用中&#xff0c;图像去雨技术可以提高图像质量&#xff0c;使得图像更加清晰、自然、易于识别和理解。 通常&#xff0c;图像去雨技术基于计算机视觉和深度学习等技术&#…

算法与数据结构--最小生成树算法

一.应用的场景 类似于这种最小成本问题&#xff0c;实际上就是计算加权图把所有点连起来权重之和最小值的时候是怎么连接的。类似的问题还有最短耗时之类的问题。 二.最小生成树的定义 生成树&#xff1a; 图的生成树是它的一颗含有其所有顶点的无环连通子图。 【简单说就是所…

作业帮基于 DolphinScheduler 的数据开发平台实践

摘要 随着任务数量、任务类型需求不断增长&#xff0c;对我们的数据开发平台提出了更高的要求。本文主要分享我们将调度引擎升级到 Apache DolphinScheduler 的实践经验&#xff0c;以及对数据开发平台的一些思考。 1. 背景 首先介绍下我们的大数据平台架构&#xff1a; 数据…

在vue3+vite中使用svg-sprite-loader,antdv修改菜单icon

1. 安装 npm install vite-plugin-svg-icons -D 2. 在vite.config.js的plugins中添加配置项 import { createSvgIconsPlugin } from vite-plugin-svg-icons;createSvgIconsPlugin({iconDirs: [resolve(process.cwd(), src/components/svgIcon/svg)], // icon存放的目录&…

【Emgu.CV教程】4.4、无缝融合应用之TextureFlattening()纹理扁平化

这是无缝融合应用的最后一篇&#xff0c;TextureFlattening()函数&#xff0c;专门用于对图像指定部位进行纹理扁平化的。这个功能现在讲起来有点太早了&#xff0c;应该放到《图像的空间滤波--平滑》这一章节中才合适。因为它就是用Sobel算子进行平滑&#xff0c;也就是在保留…

API(Date类,SimpleDateFormat类,Calendar类,JDK8时间相关类,包装类,算法小题)

文章目录 【常用API】今日内容教学目标 第一章 Date类1.1 Date概述1.2 Date常用方法 第二章 SimpleDateFormat类2.1 构造方法2.2 格式规则2.3 常用方法2.4 练习1(初恋女友的出生日期)2.5 练习2(秒杀活动) 第三章 Calendar类3.1 概述3.2 常用方法3.3 get方法示例3.4 set方法示例…