rocketmq 消息指定_SpringBoot 整合 RocketMQ 如何实现消息生产消费?

58638fb31fca6cd386360d2b17347c60.png

有时候我们在使用消息队列的时候,往往需要能够保证消息的顺序消费,而RocketMQ是可以支持消息的顺序消费的。


RocketMQ在发送消息的时候,是将消息发送到不同的队列中,然后消费端从多个队列中读取消息进行消费,很明显,在这种全局模式下,是无法实现顺序消费的。


为了实现顺序消费,我们需要把有顺序的消息按照他的顺序,将他们发送到同一个队列中,这样消费端在消费的时候,就保证了其顺序。
但是顺序消费的性能肯定也相对差一些,因为只能使用一个队列。

一、在pom.xml中添加依赖:

<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.1.0</version>
</dependency>

二、在application.yml中配置RocketMQ地址:

server:port: 8888rocketmq:name-server: 127.0.0.1:9876producer:group: ${spring.application.name}sendMessageTimeout: 300000

备注:官方下载RocketMQ,本地启动RocketMQ。

三、 一个简单的生产消费案例:

生产者:向 stringTopic 的主题中发送一个 Hello RecketMQ 的字符串。


@RestController@RequestMapping("/mq")public class ProducerController {@Resourceprivate RocketMQTemplate rocketMQTemplate;@RequestMapping("/sync/send1")public String syncSendString() {//发送一个同步消息,会返回值 ---发送到 stringTopic 主题SendResult sendResult = rocketMQTemplate.syncSend("stringTopic", "Hello RocketMQ");return sendResult.toString();}}

消费者:监听 stringTopic 主题。


@Service@RocketMQMessageListener(topic = "stringTopic", consumerGroup = "string_consumer")public class StringConsumer implements RocketMQListener<String> {@Overridepublic void onMessage(String message) {System.out.println("消费者接收消息:" + message);}}

1、启动当前服务。
2、用浏览器或者HTTP Client工具访问:http://localhost:8888/mq/sync/send1
3、查看控制台输出:【消费者接收消息:Hello RocketMQ】即表示消息消费成功。

四、实现顺序消费

生产者: 生产多条消息,方便观察顺序。向 orderTopic 主题发送5条消息,内容分别是 no1 no2 no3 no4 no5。第三个参数是order ,他的作用是会根据他的hash值计算发送到哪一个队列。用同一个值order,那么他们的hash一样。可以保证发送到同一个队列里。


@RestController@RequestMapping("/mq")public class ProducerController {@Resourceprivate RocketMQTemplate rocketMQTemplate;/**************验证RocketMQ顺序消费***************/@RequestMapping("/send/ordered")public String sendOrderedMsg(){/*** hashKey: 为了保证报到同一个队列中,将消息发送到orderTopic主题上*/rocketMQTemplate.syncSendOrderly("orderTopic","no1","order");rocketMQTemplate.syncSendOrderly("orderTopic","no2","order");rocketMQTemplate.syncSendOrderly("orderTopic","no3","order");rocketMQTemplate.syncSendOrderly("orderTopic","no4","order");rocketMQTemplate.syncSendOrderly("orderTopic","no5","order");return "success";}}

消费者:消费者在消费的时候,默认是异步多线程消费的,所以无法保证顺序,需要指定同步消费。指定 consumeMode = ConsumeMode.ORDERLY。默认值是 consumeMode = ConsumeMode.CONCURRENT。


@Service@RocketMQMessageListener(topic = "orderTopic", consumerGroup = "ordered-consumer", consumeMode = ConsumeMode.ORDERLY)public class OrderedConsumer implements RocketMQListener<String> {@Overridepublic void onMessage(String message) {System.out.println("顺序消费,收到消息:" + message);}}

1、启动当前服务。
2、用浏览器或者HTTP Client工具访问:http://localhost:8888/mq/send/ordered
3、查看控制台输出:【顺序打印:no1 no2 no3 no4 no5】即表示消息消费成功。

5b89af0ce138cc9240a33a89a6fa3340.png

Spring是一个JavaEE一站式的开发框架。它提供的功能涵盖了JavaEE程序中的表示层,服务层,持久层功能组件。这意味着,使用了Spring框架,一个框架就可以满足整个JavaEE程序的开发。

但Spring框架,更加强调的是它的轻量级(模块的可插拔)!!也就是说,除了内核以外模块,如果你不想使用可以不用,它能够整合任何第三方的框架。

所以,在现实开发中,Spring主要用于整合其他框架。我也整理了一份关于spring的面试题,希望可以帮助到大家!

感谢你看到这里,我是程序员青秧,一枚小码农,从事开发六年了,每天都会分享java相关技术文章或行业资讯

欢迎大家关注我的专栏:

程序员青秧

里面不定期分享Java架构技术知识点及解析,还会不断更新BATJ面试专题,欢迎大家前来探讨交流,如有好的文章也欢迎投稿。(注意专栏简介的介绍获取最新一线大厂Java面试题总结资料!)

注意专栏简介的介绍获取最新一线大厂Java面试题总结资料!

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

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

相关文章

mysql怎么看实例名_南方“中看不中吃”的前4名水果,莲雾只是垫底,你怎么看?...

水果很多人都喜欢吃&#xff0c;南方人可以说是最幸福的&#xff0c;因为南方的水果种类有很多种&#xff0c;而且水果的价格也很便宜&#xff0c;一年四季都能吃到便宜又好吃的水果&#xff0c;南方的很多水果&#xff0c;北方人可能都没有吃过&#xff0c;虽然南方的水果种类…

vuex中的值变化 页面重新渲染_浅谈浏览器的渲染过程,重绘与回流

浏览器的渲染过程 首先&#xff0c;我们先来了解一下浏览器的渲染过程是什么样的&#xff0c;也就是说浏览器把一堆代码呈现到页面上的过程是什么样子的&#xff0c;浏览器采用流式布局模型(Flow Bsaed Layout)&#xff0c;根据下图&#xff0c;我们可以总结出浏览器的渲染步骤…

vc 将已有项目打包成dll 并应用于其他项目_.NET混淆器 Dotfuscator使用教程:保护你的应用之存档报告文件...

Dotfuscator是一款.NET混淆器和压缩器&#xff0c;防止你的应用程序被反编译。本篇文章将继续上一篇文章与大家分享保护应用程序的后续三个部分&#xff1a;存档报告文件、加强保护和替代方法。存档报告文件作为构建的一部分&#xff0c;Dotfuscator会生成报告文件(在Dotfuscat…

html文件内容搜索,html读出文本文件内容

html读出文本文件内容更新时间&#xff1a;2007年01月22日 00:00:00 作者&#xff1a;Function bytes2BSTR(vIn)strReturn ""For i 1 To LenB(vIn)ThisCharCode AscB(MidB(vIn,i,1))If ThisCharCode strReturn strReturn & Chr(ThisCharCode)ElseNextCharC…

python 定义变量_python-003-变量

1.变量的定义python中,在程序运行时,可以随着程序的运行更改的量成为变量.简单理解: 变量就是用来临时存储数据的容器.可以认为好比是 逛超市 买面条 使用购物车 装面条变量 -> 购物车数据 -> 面条2.变量的使用# 第一次输入一个10 num1 10 # 第二次输入一个20 num2 20 …

苹果11是高通基带吗_最强对抗!小米11对抗三星、苹果华为等最高旗舰|喜欢小米吗?...

哈喽&#xff0c;您好&#xff01;我是原呵呵&#xff0c;点点关注吧&#xff0c;更多精彩内容等着您小米很快就会展示了2021年的手机&#xff0c;该公司通常会在2月份推出该季节的首个旗舰&#xff0c;但新的小米米11已向前推进了几个月&#xff0c;并成为了首个采用骁龙888处…

python split函数 空格_python上手--10行代码读懂红楼梦

取名10行代码看懂红楼梦&#xff0c;是将介绍使用python代码来读红楼梦获取其主要人物。这里的思想就是词频统计&#xff0c;通过分析红楼梦小说文字中出现最多的词语&#xff0c;来概括说明红楼梦的核心人物和事情。实际上如果你能跟着往下看&#xff0c;就开始进入了自然语言…

k8s 安装nfs_K8s--06 K8s数据持久化

K8s数据持久化数据持久化 Volume介绍Volume介绍&#xff1a;Volume是Pad中能够被多个容器访问的共享目录Kubernetes中的Volume不Pad生命周期相同&#xff0c;但不容器的生命周期丌相关Kubernetes支持多种类型的Volume&#xff0c;并且一个Pod可以同时使用任意多个VolumeVolume类…

matlab为自定义后缀文件设置图标_【V3.0更新】| 这可能是全网最好用的文件管理神器了......

?点击关注Excel表哥公众号使用Excel制作自带超链接的文件目录索引确实可以很好地帮忙大家管理电脑里的文件。在此分享几个各行各业朋友们的使用截图&#xff1a;▲一个硬件工程师朋友的使用截图▲一个医院工作人员的数据统计文件管理▲学生朋友用来管理论文文献▲VBA编程爱好者…

#中队列的数据结构_数据结构与算法拓展(一)

栈与队列申明&#xff1a;由于篇幅限制&#xff0c;文章可能有些简略&#xff0c;如果大家想要详细了解&#xff0c;请一定要百度一下&#xff0c;并阅读例题&#xff0c;完成习题绪言&#xff1a;计算机科学在过去的数十年内发展飞速&#xff0c;各种新颖的技术纷至沓来&#…

display属性_Numpy知识点(1)讲解实操安装/属性/数组创建/运算

# 1、安装包# pip install numpy #原生python安装# conda install numpy #Anaconda的安装# 使用Numpyimport numpy as np a np.arange(15) #生成0-14的一维数组display(a)display( )和print( )都是打印,在大多数编程软件上都使用print,jupyter notebook中我们可以使用d…

springboot怎么设置多个路径全部跳转首页_SpringBoot(四)—Web开发(二)

这篇文章准备来记录一下一个restful风格小项目的流程&#xff0c;上篇文章为它做了一个基础&#xff0c;如果有什么错误希望大家能够指出。目录首页国际化登录拦截器CRUD一、首页在访问localhost:8080/的时候&#xff0c;默认访问首页在自己配置的SpringMVC的配置类中Configura…

计算机英语六级,英语六级作文范文:计算机

英语六级考试时间越来越近了&#xff0c;所以在备考的时候就更要掌握技巧&#xff0c;勤加练习。在备考英语六级写作时&#xff0c;学习一篇好的范文&#xff0c;会给复习带来事半功倍的效果。Using a computer every day can have more negative than positive effects on you…

python软件_Python自制照片美颜软件~

下午被一个骗子恶心到了&#xff0c;本来听公开课听得好好的&#xff0c;搞得心情极差&#xff0c;于是就中断了网课&#xff0c;听听音乐&#xff0c;写一下文章吧&#xff01;前期准备①Python编译环境以及Python代码编辑器Pycharm的安装&#xff1a;请在【微信公众后台】找到…

数据集怎么导出_PCA算法 | 数据集特征数量太多怎么办?用这个算法对它降维打击...

今天是机器学习专题的第27文章&#xff0c;我们一起来聊聊数据处理领域的降维(dimensionality reduction)算法。我们都知道&#xff0c;图片格式当中有一种叫做svg&#xff0c;这种格式的图片无论我们将它放大多少倍&#xff0c;也不会失真更不会出现边缘模糊的情况。原因也很简…

常用命令_GIT常用命令大全

Git 是一个很强大的分布式版本控制系统。它不但适用于管理大型开源软件的源代码&#xff0c;管理私人的文档和源代码也有很多优势。克隆远程文件&#xff1a;git clone https://gitee.com/abcd/codefile.git projectgit checkout -b dev(本地分支名称) origin/dev(远程分支名称…

nvidia显示设置不可用_Nvidia显示设置不可用,您当前未使用连接到NVIDIA GPU的显示器的解决方法...

相信不少用户遇到这样一个问题&#xff0c;就是新购买的台式机电脑&#xff0c;配置达标的情况下&#xff0c;玩游戏出现卡顿不流畅的现象&#xff0c;准备在NVIDIA控制面板查看是否设置的问题&#xff0c;在打开NVIDIA控制面板的时候&#xff0c;提示了“Nvidia显示设置不可用…

oracle tns 代理配置_Toad for oracle安装配置与使用

一.toad安装与配置注意:toad的使用本机电脑必须安装完整版oracle客户端,不能是精简版的.1.1完整版oracle客户端的安装.1.解压文件&#xff0c;安装oracle客户端打开安装包&#xff0c;找到setup.ext&#xff0c;开始安装。提示下图弹窗,可根据此网址内容进行更改(https://blog.…

吴枫 python小课账号_无门槛速学编程——Python小短课,自上而下分而治之

【Python小短课 11】自上而下&#xff0c;分而治之 做任何事都需计划&#xff0c;编程也是。 譬如写文章要列大纲、作画要想布局&#xff0c;编程也需先谋全局&#xff0c;而后思虑细节。 就以上回说到的“找宝藏”这个程序举例&#xff0c;最顶层的需求自然就是“找宝藏”&…

计算机本地磁盘D无法扩展,计算机上的本地磁盘D突然无法打开,表明它需要格式化...

接受使用数据恢复软件将重要数据保存到其他磁盘FindDate特定操作: 运行软件----“打开”后&#xff0c;将显示要还原的驱动器. C \ D \ E \ F选择您要还原的一个&#xff0c;它将开始. 扫描后&#xff0c;再次保存扫描的文件. 哈哈&#xff0c;希望对您有所帮助.最后&#xff0…