系列八(实战)、发送 接收延迟消息(Java操作RocketMQ)

一、发送 & 接收延迟消息

1.1、概述

        延迟消息是指发送者发送完消息后,不希望消息被立即投送给订阅者,等一段时间之后再投递给订阅者,例如生活中我们常见的例子,京东商城购物、12306买火车票...,下完订单后就可以发送一个延迟消息,30分钟后检查该订单的状态,如果用户未付款就取消此订单,释放库存。使用 RocketMQ 的延时消息可以简化定时调度任务的开发逻辑,实现高性能、可扩展、高可靠的定时触发能力。

1.2、消息模型

1.3、Demo04MQTestApp

/*** @Author : 一叶浮萍归大海* @Date: 2023/12/25 10:26* @Description: 发送 & 接收延迟消息*/
@Slf4j
public class Demo04MQTestApp {/*** 发送延迟消息*/@Testpublic void demo4Producer() throws Exception {// 1、创建一个生产者DefaultMQProducer producer = new DefaultMQProducer("delay-producer-group");// 2、连接NameServerproducer.setNamesrvAddr(RocketMQConstant.NAME_SERVER_ADDR);// 3、启动producer.start();// 4、创建消息Message message = new Message("delay-topic", "这是一个延迟消息)".getBytes(StandardCharsets.UTF_8));/*** 4.1、在message中设置延迟时间*  注意事项:4.x版本的RocketMQ只支持如下等级的延迟时间,例如:1代表延迟1s,10代表延迟6min,18代表延迟2小时*  1==1s、2==5s、3==10s、4==30s、5==1m、6==2m、7==3m、8==4m、9==5m*  10 ==》6m、11 ==》7m、12 ==》8m、13 ==》9m、14 ==》10m、15 ==》20m、16 ==》30m、17 ==》1h、18 ==》2h*/message.setDelayTimeLevel(4);// 5、发送消息producer.sendOneway(message);log.info("【demo4Producer】发送消息成功,当前时间:{}",LocalDateTimeUtil.format(LocalDateTime.now(),"yyyy-MM-dd HH:mm:ss"));// 6、关闭生产者producer.shutdown();}/*** 接收延迟消息(Push方式)*/@Testpublic void demo4PushConsumer() throws Exception {// 1、创建一个消费者DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("delay-consumer-group");// 2、连接NameServerconsumer.setNamesrvAddr(RocketMQConstant.NAME_SERVER_ADDR);// 3、订阅消息,*表示订阅该主题所有的消息consumer.subscribe("delay-topic", "*");// 4、设置监听器(采用异步回调方式,一直监听)consumer.registerMessageListener(new MessageListenerConcurrently() {@Overridepublic ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {// 业务逻辑log.info("我是消费者【demo4PushConsumer】,当前时间:{}",LocalDateTimeUtil.format(LocalDateTime.now(),"yyyy-MM-dd HH:mm:ss"));for (MessageExt msg : msgs) {log.info("我是消费者【demo4PushConsumer】,我收到的消息是:{},当前时间:{}", StrUtil.utf8Str(msg.getBody()),LocalDateTimeUtil.format(LocalDateTime.now(),"yyyy-MM-dd HH:mm:ss"));}/*** 返回值:消费消息成功与否*      CONSUME_SUCCESS:表明消费成功,消息会从MQ出队*      RECONSUME_LATER:表明消费失败,消息会重新回到队里,过一会儿再重新投递出来给当前消费者或者其他消费者*/return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}});// 5、启动consumer.start();log.info("【demo4PushConsumer】启动成功,正在等待接收消息...");// 6、挂起当前JVMSystem.in.read();}}

1.4、RocketMQ中的延迟等级

https://rocketmq.apache.org/zh/docs/4.x/producer/04message3

1.5、测试

先后运行demo4PushConsumer和demo4Producer,观察控制台日志:

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

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

相关文章

搭建本地的pip镜像源

1. 创建文件夹&#xff1a;./pypi_mirror_test 2. 创建并进入conda虚拟环境&#xff0c;安装pip2pi包 pip install pip2pi 3. 下载pypi的packages 可以参考其他博客&#xff0c;或者我之前的博客. 偷懒&#xff0c;仅仅测试用的话&#xff1a; 1&#xff09;在文件夹下创…

系列十一(实战)、发送 接收带标签的消息(Java操作RocketMQ)

一、发送 & 接收带标签的消息 1.1、概述 消息的种类纷繁复杂&#xff0c;不同的业务场景需要不同的消息&#xff0c;基于此RocketMQ提供了消息过滤功能&#xff0c;通过Tag或者Key进行区分&#xff0c;本章介绍Tag&#xff0c;我们再往一个Topic里面发送消息的时候&#x…

【浏览器】同源策略和跨域

1. 什么是跨域 在说跨域之前,先说说同源策略,什么是同源策略呢?同源策略是浏览器的一种安全机制,减少跨站点脚本攻击(XSS,Cross Site Scripting)、跨站点请求伪造(CSRF,Cross Site Request Forgery)攻击等,因为非同源的请求会被浏览器拦截掉。 同源就是协议、域名(…

doris基本操作,04-表结构的变更

整体思路 因为doris完全兼容mysql协议&#xff0c;因此操作上基本与mysql没有太大区别&#xff0c; 之需要注意与doris相关的关键字即可&#xff0c;如&#xff1a;预聚合&#xff0c;key等 当前表结构 create table table1 {siteid int default 10,citycode smallint,usern…

【Unity地形】使用地形工具创建场景环境-Terrain

如上图Unity的地形工具可以让我们实现创建复杂、丰富的3D室外环境。 我们创建地形很简单&#xff0c;在层级面板中右键-3Dobject-Terrain 就可以创建一个默认的地形模型&#xff01;这个模型是Unity内置的。 接下来的地形编辑功能全部集中在这个地形的组件上 主要功能如下&…

Goland配置leetcode

1. 安装 首先在goland的setting界面上找到Plugins&#xff0c;然后搜索关键字leetcode&#xff0c;找到LeetCode Editor&#xff0c;安装它。 在安装后&#xff0c;第一次需要对其进行配置&#xff0c;在Tools中找到LeetCode Plugins&#xff0c;如下图所示进行配置。首先国内…

关于调试和开发中对文件写操作导致乱码问题

背景基于上文log机制重定向问题&#xff0c;将代码打印单独存放文件中出现双击文件&#xff0c;如下图现象所示(银河麒麟系统) 使用vim打开文件发现有许多/00的乱码。 怀疑是数据没有同步至硬盘导致的。 于是在每次输入到文件后加入fdatasync函数&#xff0c;部分代码如下&am…

three.js使用精灵模型Sprite渲染森林

效果&#xff1a; 源码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right&quo…

React学习计划-React16--React基础(六)路由

路由 一、版本5路由 1. react-router-dom 2. 路由的使用 1. 基础使用 安装&#xff1a;yarn add react-router-dom5明确好界面中的导航区、展示区导航区Link标签包裹 <Link to"/home">Home</Link>展示区写在Route标签进行匹配 <Route path/home …

2024年PMP考试新考纲-PMBOK第七版-项目管理原则真题解析(续3)

马上就要进入2024年了&#xff0c;要参加2024年PMP一季度考试的小伙伴可以准备起来了。2024年的PMP考试将继续采用新考试大纲&#xff0c;考试内容包括PMBOK第六版、PMBOK第七版和敏捷实践指南&#xff0c;而且敏捷&#xff08;或者叫混合&#xff09;的项目环境将占比超过50%&…

2024年最新Python爬虫入门『最强教程』新鲜出炉!

近年来&#xff0c;大数据成为业界与学术界最火热的话题之一&#xff0c;数据已经成为每个公司极为重要的资产。互联网大量的公开数据为个人和公司提供了以往想象不到的可以获取的数据量。而掌握网络爬虫技术可以帮助你获取这些有用的公开数据集。 爬虫能干什么呢&#xff1f;一…

chatglm3本地部署(综合Demo版本)教程

1.下载代码 我是在本地c盘中&#xff0c;创建了一个glm3文件夹&#xff0c;然后把代码拉到这个文件夹里&#xff0c;所以在clone之前&#xff0c;需要在cmd中&#xff0c;把路径切换到glm3文件夹下&#xff0c;然后执行如下代码。 git clone https://github.com/THUDM/ChatGL…