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.hqwc.cn/news/443388.html

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

相关文章

UE里的反射(Reflections)机制

年底了&#xff0c;把之前的草稿文章整理一下&#xff0c;整理好的发出来 参考&#xff1a;https://zhuanlan.zhihu.com/p/518907376 参考&#xff1a;https://www.cnblogs.com/ghl_carmack/p/5698438.html 参考&#xff1a;https://www.unrealengine.com/zh-CN/blog/unreal-p…

一体化设计:兼容多种OS系统Linux网关楼宇DDC

在工业物联网&#xff08;IIoT&#xff09;和智能建筑领域&#xff0c;钡铼网关具备高度灵活性与强大计算能力的边缘网关产品正逐渐成为推动行业智能化转型的关键要素。本文将详细介绍的基于Linux系统的4G工业智能网关&#xff0c;不仅拥有NXP i.MX8M Mini四核64位处理器的强大…

Assemble Them All: 创新物理规划助力通用装配与拆卸(SIGGRAPH Asia 2022)

Assemble Them All: 创新物理规划助力通用装配与拆卸&#xff08;SIGGRAPH Asia 2022&#xff09; 欢迎来到本文&#xff0c;我们将深入探讨《Assemble Them All: Physics-Based Planning for Generalizable Assembly by Disassembly》这一项目。该项目由Yunsheng Tian、Jie X…

ManticoreSearch-(安装配置,集群搭建)-学习总结

ManticoreSearch-(安装配置)-学习总结 基础概念安装搭建集群搭建(基于K8S) 原文地址 https://blog.csdn.net/liuyij3430448/article/details/135955025 基础概念 Manticore Search是一个专门为搜索设计的多存储数据库&#xff0c;具有强大的全文搜索功能&#xff0c;适用于…

行为型设计模式—迭代器模式

迭代器模式&#xff1a;也叫作游标模式&#xff0c;能在不暴露复杂数据结构内部细节的情况下遍历其中所有的元素。在迭代器的帮助下&#xff0c; 客户端可以用一个迭代器接口以相似的方式遍历不同集合中的元素。 当集合背后为复杂的数据结构&#xff0c;且希望对客户端隐藏其复…

基于矢量控制的交流电机驱动simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 交流电机基础 4.2 矢量控制原理 4.3 矢量控制的实现 5.完整工程文件 1.课题概述 基于矢量控制的交流电机驱动simulink建模与仿真。系统仿真输出电压&#xff0c;电流&#xff0c;电机转速以及扭矩…

使用AnimeGAN2将照片动漫化--入门

使用AnimeGAN2将照片动漫化--入门 1. 环境准备2. 使用3. 总结 1. 环境准备 首先下载AnimeGAN2:https://github.com/TachibanaYoshino/AnimeGANv2.git 然后使用conda 创建一个python3.6的环境conda create -n pyt36 python3.6&#xff1a; 创建一个requirements.txt文件&am…

Spring Boot第一天

SpringBoot概述 Spring Boot是Spring提供的一个子项目&#xff0c;用于快速构建Spring应用程序 传统方式构建Spring应用程序 导入依赖繁琐 项目配置繁琐 为了简化如此繁琐的配置流程&#xff0c;SpringBoot这一子项目提供了如下特性 SpringBoot特性 起步依赖 本质上就是一个…

飞桨大模型分布式训练技术

今天我为大家介绍飞桨大模型分布式训练技术&#xff0c;内容分为以下几个部分&#xff1a; 首先&#xff0c;我会介绍大模型训练面临的重点难题&#xff1b;然后&#xff0c;为大家介绍飞桨在大模型训练领域的特色分布式训练技术和优化方案&#xff1b;最后&#xff0c;伴随着…

深度学习-自注意力机制

文字编码 one-hot编码&#xff0c;让模型自己去学习怎么进行编码 常见的输出 1.每个词都有一个输出值 2.每个句子输出一个值&#xff0c;情感分类 3.输入与输出长度不对应&#xff0c;翻译任务&#xff0c;生成任务。 RNN最早的语言处理 RNN解决的是模型去考虑前面的输入…

NoSQL数据库简介

NoSQL数据库简介 Brief Introduction to NoSQL Databases By JacksonML 1. 什么是SQL&#xff1f; 在了解NoSQL之前&#xff0c;先简要介绍一下SQL。 SQL是 Structured Query Language&#xff08;结构化查询语言&#xff09;的缩写。 SQL在关系型数据中广泛使用&#xf…

IS-IS:06 ISIS路由汇总

与OSPF 协议相同&#xff0c; IS-IS 也能够通过路由聚合来减少路由条目。不同的是&#xff0c;OSPF 只能在ABR 和ASBR 路由器上进行路由聚合&#xff0c;而IS-IS 路由器能否进行路由聚合以及对什么样的路由才能进行聚合取决于路由器的类型及路由的类型。 在IS-IS 网络中&#x…