Spring Boot集成RocketMQ

本文目的是:教会你使用Spring Boot集成RocketMQ。

  1. pom.xml文件引入rocketMQ依赖
<!--        rocketmq 依赖--><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.3</version></dependency><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version>4.7.0</version></dependency><!-- 还有其它需要的jar包自由引入(注:fastjson不要使用低于1.2.60版本,会有安全漏洞) --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version></dependency>
  1. application.yaml 配置文件
#rocketmq的配置
rocketmq:name-server: 127.0.0.1:9876 # rocketmq访问地址producer:group: cxccccccc # 生产者组send-message-timeout: 3000 # 消息发送超时时长,默认3sretry-times-when-send-failed: 3 # 同步发送消息失败重试次数,默认2retry-times-when-send-async-failed: 3 # 异步发送消息失败重试次数,默认2
  1. 先去RocketMQ-Dashboard 创建Topic。
    在这里插入图片描述
  2. Controller层代码,自行补全外壳
@Autowiredprivate MQProducerService producerService;@PostMapping("/test")@ResponseBodypublic Object test(@RequestBody LinkedHashMap<String,Object> params) {int type = Integer.parseInt(params.get("type").toString());switch (type) {case 1:producerService.send(new AjaxResult());break;case 2:// syncSend() 同步发送消息。return producerService.sendMsg("{\"code\": 200,\"msg\": \"操作成功\",\"data\":{}}");case 3:// asyncSend() 发送成功后会执行回调函数,执行响应的代码。producerService.sendAsyncMsg("你好啊,这里是消息内容");break;case 4:// 会延迟xx s后才会到MQ里面。SendResult sendResult = producerService.sendDelayMsg("hello,this is the message waiting to consume.", 2);return sendResult;case 5:// 发送单向消息,发完就发完了,没有返回值。producerService.sendOneWayMsg("今天是美好的一天");break;case 6:// 发送的消息带有tag 标签、带有KEY业务标识。SendResult sendResult1 = producerService.sendTagMsg("今天是蛋糕的一天");return sendResult1;default:throw new IllegalStateException("Unexpected value: " + type);}return null;}
  1. Service 层代码,MQProducerService
@Slf4j
@Component
public class MQProducerService {/*** UCS请求日志的rocketmq的主题*/private static final String topic = "MSG_DingAttendance";/*** 直接注入使用,用于发送消息到broker服务器*/@Autowiredprivate RocketMQTemplate rocketMQTemplate;/*** 普通发送(这里的参数对象ajaxResult可以随意定义,可以发送个对象,也可以是字符串等)** @param ajaxResult*/public void send(AjaxResult ajaxResult) {rocketMQTemplate.convertAndSend(topic + ":tag1", ajaxResult);}/*** 发送同步消息(阻塞当前线程,等待broker响应发送结果,这样不太容易丢失信息)* msgBody也可以是对象,SendResult为返回的发送结果)** @param msgBody* @return*/public SendResult sendMsg(String msgBody) {SendResult sendResult = rocketMQTemplate.syncSend(topic, MessageBuilder.withPayload(msgBody).build());log.info("【sendMsg】sendResult={}", JSON.toJSONString(sendResult));return sendResult;}/*** 发送异步消息(通过线程池执行发送到broker的消息任务,执行完后回调:在SendCallback中可处理相关成功失败时的逻辑)* (适合对响应时间敏感的业务场景)** @param msgBody*/public void sendAsyncMsg(String msgBody) {rocketMQTemplate.asyncSend(topic, MessageBuilder.withPayload(msgBody).build(), new SendCallback() {@Overridepublic void onSuccess(SendResult sendResult) {// 处理消息发送成功逻辑System.out.println("sendAsyncMsg发送成功");}@Overridepublic void onException(Throwable throwable) {// 处理消息发送异常逻辑System.out.println("sendAsyncMsg发送失败");}});}/*** 发送延时消息(上面的发送同步消息,delayLevel的值就为0,因为不延时)* 在start版本中 延时消息一共分为18个等级分别为:1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h** @param msgBody    消息体* @param delayLevel 延时等级*/public SendResult sendDelayMsg(String msgBody, int delayLevel) {return rocketMQTemplate.syncSend(topic, MessageBuilder.withPayload(msgBody).build(), 3000, delayLevel);}/*** 发送单向消息(只负责发送消息,不等待应答,不关心发送结果,如日志)** @param msgBody*/public void sendOneWayMsg(String msgBody) {rocketMQTemplate.sendOneWay(topic, MessageBuilder.withPayload(msgBody).build());}/*** 发送带tag的消息,直接在topic后面加上“:tag”,key在Header里面设置KEYS** @param msgBody*/public SendResult sendTagMsg(String msgBody) {String key = String.valueOf(IdUtils.createSnowflake());Message message = new Message(topic, key, msgBody.getBytes());return rocketMQTemplate.syncSend(topic + ":tag2", MessageBuilder.withPayload(message).setHeader("KEYS",key).build());}}
  1. 发送请求,去RocketMQ-Dashboard里面查看消息,都是成功的。
    在这里插入图片描述

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

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

相关文章

XCTF:warmup[WriteUP]

CtrlU查看页面源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible&q…

嵌入式学习第十四天!(结构体、共用体、枚举、位运算)

1. 结构体&#xff1a; 1. 结构体类型定义&#xff1a; 嵌入式学习第十三天&#xff01;&#xff08;const指针、函数指针和指针函数、构造数据类型&#xff09;-CSDN博客 2. 结构体变量的定义&#xff1a; 嵌入式学习第十三天&#xff01;&#xff08;const指针、函数指针和…

深度学习侧信道攻击的集成方法

深度学习侧信道攻击的集成方法 深度学习侧信道攻击的集成方法项目背景与意义摘要项目链接作者数据集CHES CTF 数据集ASCAD FIXED KEY 数据集ASCAD RANDOM KEY 数据集 代码代码执行神经网络 深度学习侧信道攻击的集成方法 项目背景与意义 在TCHES2020&#xff08;第4期&#x…

安卓线性布局LinearLayout

<?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_parent"android:…

如何用MapTalks IDE来发布网站?

简介 MapTalks IDE 全称 MapTalks集成设计环境&#xff08;Integrated Design Environment&#xff09;&#xff0c;是由MapTalks技术团队开发的新一代web地图设计软件。 通过MapTalks IDE&#xff0c;您可以自由的创建二维和三维地图&#xff0c;在其中载入或创建地理数据&a…

【数据结构与算法】之哈希表系列-20240130

这里写目录标题 一、383. 赎金信二、387. 字符串中的第一个唯一字符三、389. 找不同四、409. 最长回文串五、448. 找到所有数组中消失的数字六、594. 最长和谐子序列 一、383. 赎金信 简单 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不…

【Midjourney】新手指南:命令

1./ask 向Midjourney提问&#xff0c;不过问题和回答都是英文的&#xff0c;例如&#xff1a; 2./blend 将两张图片合并为一张 ​ 3./describe 上传一张图片&#xff0c;Midjourney会生成四组该图片相关的关键词&#xff0c;可以使用这些关键词再生成图片。 ​ 4./turbo …

力扣 55.跳跃游戏

思路&#xff1a; 从后往前遍历&#xff0c;遇到元素为0时&#xff0c;记录对应的下标位置&#xff0c;再向前遍历元素&#xff0c;看最大的跳跃步数能否跳过0的位置&#xff0c;不能则继续往前遍历 代码&#xff1a; class Solution { public:bool canJump(vector<int>…

毕业设计过程学习

传统的目标检测算法主要通过人工设计与纹理、颜色和形状相关的特征来进行目标区域特征的提取。随着深度学习和人工智能技术的飞速发展&#xff0c;目标检测技术也取得了很大的成就。早期基于深度学习的目标检测算法的研究方向仍然是将目标定位任务和图像分类任务分离开来的&…

uni-app在hbuilderx打开微信开发工具运行

一、运行设置配置微信开发者工具路径 运行-运行到小程序模拟器-运行设置 配置微信开发工具的安装路径&#xff08;可浏览文件位置选择&#xff09;&#xff1b;web服务器端口号在第二步骤获得&#xff1b; 二、打开微信开发者工具设置-安全设置 打开服务端口开关&#xff0…

使用ffmpeg madiamtx制作一个rtsp源

有很多人在跑rtsp解码的demo的时候, 苦于找不到一个可以拉流的源, 这里说一个简单的方法. 使用mediamtx, 加ffmpeg加mp4文件方式, 模拟一个rtsp的源. 基本架构就是这样. 在PC上, 这里说的PC可以是远程的服务器, 也可以是你的开发用的windows, 都行. 把mediamtx, 在pc上跑起来 …

书写触感细腻的电容触控笔,透明造型超好看,西圣Pencil2上手

iPad在配上手写笔之后&#xff0c;才能才能充分发挥优势&#xff0c;实现除看视频之外的更多功能。很多人入手iPad的初衷都是工作或者学习&#xff0c;如果只拿来观剧或玩游戏就太浪费了。当然了&#xff0c;现实情况下&#xff0c;Apple Pencil高昂的定价也是很多人望而却步的…

【2024-01-20】 瑞幸咖啡小程序-blackbox

需要联系主页V 瑞幸咖啡小程序 登入需要过同盾滑块下单需要balckbox参数 测试 下单 过滑块 登入发短信 加密参数

第九节HarmonyOS 常用基础组件20-Divider

1、描述 提供分割器组件&#xff0c;分割不同内容块或内容元素。 2、接口 Divider() 3、属性 名称 参数类型 描述 vertical boolean 使用水平分割线还是垂直分割线。 false&#xff1a;水平分割线 true&#xff1a;垂直分割线 color ResourceColor 分割线颜色 默认…

【揭秘】诱骗28V竟如此简单--HUSB238A-EVB-V2.0 使用指南

随着USB TYPE-C的流行&#xff0c;越来越多的桶形连接器正在转换成USB-C连接器&#xff0c;越来越多的电子产品从传统的USB接口升级为TYPE-C接口&#xff0c;并实现PD快充。大一统的充电接口, 充电器接口全兼容&#xff0c;给消费者带来极大的便利。当下&#xff0c;筋膜枪、无…

【全csdn最前沿LVGL9】Style样式

文章目录 前言一、Style的介绍二、State状态三、级联样式四、Style的继承五、组件六、设置样式属性七、添加和移除样式7.1 添加7.2 替换样式7.3 移除样式7.4 当对象实时改变了样式去通知对象刷新样式 八、获取一个对象的属性值九、本地样式十、过度动画十一、主题总结 前言 在…

区块链游戏解说:什么是 SecondLive

数据源&#xff1a;SecondLive Dashboard 作者&#xff1a;lesleyfootprint.network 什么是 SecondLive SecondLive 是元宇宙居民的中心枢纽&#xff0c;拥有超过100 万用户的蓬勃社区。它的主要使命是促进自我表达&#xff0c;释放创造力&#xff0c;构建梦想中的平行宇宙…

Linux 终端命令行配色修改 | 助你告别屏幕盯太久眼神涣散无法聚焦的痛苦!

今天的我想把新服务器账号的命令行更改一下配色&#xff0c;然后…然后…然后…就没有然后了&#xff0c;脑子就瓦特了&#xff01;硬是想不起来那行命令&#xff0c;然后苦哈哈去之前的账号里复制粘贴去了哈哈哈哈哈&#xff0c;顺便分享一下&#xff01;增加大家肉眼的快乐&a…

前端使用onlyOffice添加水印

//#region添加水印const numWatermarksWidth Math.ceil(window.innerWidth / 100); // 水平方向的水印数量const numWatermarksHeight Math.ceil(window.innerHeight / 100); // 垂直方向的水印数量for (let i 0; i < numWatermarksHeight; i) {for (let j 0; j < nu…

1.31学习总结

1.31 1.线段树 2.Bad Hair Day S&#xff08;单调栈&#xff09; 3.01迷宫(BFS连通块问题剪枝)&#xff08;连通性问题的并查集解法&#xff09; 4.健康的荷斯坦奶牛 Healthy Holsteins&#xff08;DFS&#xff09; 线段树与树状数组 线段树和树状数组的功能相似&#xff0c;但…