Springboot快速集成阿里云RocketMq
前言
随着互联网的兴起,越来越多的用户开始享受科技带来的便利,对于服务的压力也日益增大,随即便有了高并发、高性能、高可用等各种解决方案,这里主要介绍RocketMq的集成方法。(文末附源码地址)
正文
1、添加依赖
<!-- RocketMQ依赖 -->
<dependency>
<groupId>com.aliyun.openservices</groupId>
<artifactId>ons-client</artifactId>
<version>1.8.4.Final</version>
</dependency>
2、添加RocketMq配置
## 阿里RocketMQ配置
rocketmq:
## 连接点地址 参考控制台实例详情
name-server: xxx.rmq.aliyuncs.com:8080
access-key: xxx
secret-key: xxx
## 自行在阿里云控制台添加group和topic
group: test_group
topic: test_topic
配置类:
@Data
@Configuration
@ConfigurationProperties(prefix = "rocketmq")
public class RocketMqConfig { private String nameServer; private String accessKey; private String secretKey; @Bean
public Properties build() {
Properties properties = new Properties();
properties.setProperty(PropertyKeyConst.AccessKey, accessKey);
properties.setProperty(PropertyKeyConst.SecretKey, secretKey);
properties.setProperty(PropertyKeyConst.NAMESRV_ADDR, nameServer);
return properties;
} }
3、生产端代码(配置+发送消息)
@Autowired
RocketMqConfig rocketMqConfig; @Value("${rocketmq.group}")
private String group; @Bean(initMethod = "start", destroyMethod = "shutdown")
public ProducerBean buildProducer() {
ProducerBean producer = new ProducerBean();
//配置文件
Properties properties = rocketMqConfig.build();
//设置发送超时时间,单位毫秒
properties.setProperty(PropertyKeyConst.SendMsgTimeoutMillis, "3000");
//设置组id
properties.setProperty(PropertyKeyConst.GROUP_ID, group);
producer.setProperties(properties);
return producer;
}
public void sendAsyncMessage(String content, String topic) {
Message msg = new Message();
//设置主题和标签
msg.setTopic(topic);
msg.setTag("*");
msg.setBody(content.getBytes());
producer.sendAsync(msg, new SendAsyncMessage());
}
4、消费端代码(配置+接收消息)
@Configuration
public class ConsumerClient { @Value("${rocketmq.group}")
private String group;
@Value("${rocketmq.topic}")
private String topic; @Autowired
RocketMqConfig rocketMqConfig;
@Autowired
private MyRocketMessageListener messageListener; @Bean(initMethod = "start", destroyMethod = "shutdown")
public ConsumerBean buildConsumer() { //消费者对象bean
ConsumerBean consumerBean = new ConsumerBean();
//配置文件
Properties properties = rocketMqConfig.build();
//设置组id
properties.setProperty(PropertyKeyConst.GROUP_ID, group);
//将消费者线程数固定为20个 20为默认值
// properties.setProperty(PropertyKeyConst.ConsumeThreadNums, threadNum);
consumerBean.setProperties(properties); //配置订阅关系
Map<Subscription, MessageListener> subscriptionTable = new HashMap<>();
//当前为订阅一个主题配置(订阅多个topic一样设置)
Subscription subscription = new Subscription();
subscription.setTopic(topic);
subscription.setExpression("*");
subscriptionTable.put(subscription, messageListener);
consumerBean.setSubscriptionTable(subscriptionTable);
return consumerBean;
}
}
@Slf4j
@Configuration
public class MyRocketMessageListener implements MessageListener { @Override
public Action consume(Message message, ConsumeContext context) { // 业务处理逻辑
log.info(">>>>> 【消费者】系统时间:[{}]接收消息MsgId=[{}],消息内容:{}", LocalDateTime.now(), message.getMsgID(), new String(message.getBody(), StandardCharsets.UTF_8));
try {
// todo 业务逻辑处理
return Action.CommitMessage;
} catch (Exception e) {
//消费失败
log.error(">>>>> 【消费者】系统时间:[{}]处理消息MsgId=[{}], 当前消费失败, 开始重试......!", LocalDateTime.now(), message.getMsgID());
return Action.ReconsumeLater;
}
}
}
5、接口
@RestController
@RequestMapping("test")
public class MqTest { @Value("${rocketmq.topic}")
private String topic; @Autowired
RocketMQUtil rocketMQUtil; @RequestMapping("mq")
public String testMq(@RequestParam("content") String content) {
rocketMQUtil.sendAsyncMessage(content, topic);
return "success";
} }
6、测试验证
①启动项目

②调用接口
浏览器:http://localhost:8080/test/mq?content=testPush

观察后端日志:

至此,接入完成。
附:
源码地址:https://gitee.com/yhc910/RocketMq-Demo
Springboot快速集成阿里云RocketMq的更多相关文章
- 阿里云RocketMQ定时/延迟消息队列实现
新的阅读体验:http://www.zhouhong.icu/post/157 一.业务需求 需要实现一个提前二十分钟通知用户去做某件事的一个业务,拿到这个业务首先想到的最简单得方法就是使用Redis ...
- [原创]阿里云RocketMQ踩过的哪些坑
由于公司的最近开始使用RocketMQ来做支付业务处理, 便开启了学习阿里云RocketMQ的学习与实践之路, 其中踩了不少的坑, 大部份是由于没有仔细查看阿里云的技术文档而踩的坑. 但是有一个非常大 ...
- spring boot集成阿里云短信发送接收短信回复功能
1.集成阿里云通信发送短信: 在pom.xml文件里添加依赖 <!--阿里短信服务--> <dependency> <groupId>com.aliyun</ ...
- 阿里云RocketMQ的生产者简单实现
// MQ的应用场景有比如 订单变更消息可以通过产生这个事件的地方(比如前端调用后端的接口post一个订单,那么就是在这个mapping方法里做一个生产者[不过最好通过aop来实现,不然n多个接口都要 ...
- Springboot下实现阿里云短信验证功能(含代码)
Springboot下实现阿里云短信验证功能 一 开通阿里云短信服务 阿里云官网注册登录 找到短信服务并开通 打开短信服务的管理台 在国内消息那栏中添加签名管理和模板管理(按照格式要求去写) 在右上角 ...
- 在线工具生成接入信息mqtt.fx快速接入阿里云
在线工具生成接入信息mqtt.fx快速接入阿里云 在使用阿里云获取的三元组信息进行接入的时候,往往需要加密生成接入信息之后才能进行接入,因此我根据阿里云提供的加密工具实现了一个阿里云物联网平台mqtt ...
- django之集成阿里云通信(发送手机短信验证码)
python3 + django2.0 集成 "阿里云通信" 服务: (SDK文档地址:https://help.aliyun.com/document_detail/55491. ...
- Springboot集成阿里云短信
目录 1 前言 2 准备工作 2.1 了解流程 2.2 配置信息 2.3 短信签名和模板 2.3.1 签名 2.3.2 模板 2.3.3 存入数据库 3 SDK 4 集成Springboot 4.1 ...
- Springboot项目之阿里云OSS快速入门
阿里云oss 阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云对外提供的海量.安全.低成本.高可靠的云存储服务.您可以通过本文档提供的简单的REST接口,在任何 ...
- Spring boot实战项目整合阿里云RocketMQ (非开源版)消息队列实现发送普通消息,延时消息 --附代码
一.为什么选择RocketMQ消息队列? 首先RocketMQ是阿里巴巴自研出来的,也已开源.其性能和稳定性从双11就能看出来,借用阿里的一句官方介绍:历年双 11 购物狂欢节零点千万级 TPS.万亿 ...
随机推荐
- netstat命令输出详解
netstat命令输出详解 1. 列出所有的TCP和UDP端口 2. 命令输出详解 Proto:协议名(tcp协议还是udp协议) recv-Q:网络接收队列,send-Q:网路发送队列 a. rec ...
- JS深入学习笔记 - 第三章.变量作用域与内存
1.原始值和引用值 ECMScript变量包含两种不同类型是数据:原始值和引用值. 原始值:最简单的数据.有6中原始值:Undefined.Null.Boolean.Number.String和Sym ...
- 算法打卡|Day2 数组part02
Day2 数组part02 今日任务:977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II 目录 Day2 数组part02 今日任务:977.有序数组的平方 ,209.长度最小的 ...
- 微服务使用openfeign调用单点的会话失效问题
项目Springcloud,认证中心方式实现SSO使用开源框架Sa-Token 本身的单独访问每个客户端服务的单点就没有问题.然后单点通过Fegin调用就不好使了! 主要使用的Sa-Token的微服务 ...
- 关于Word转PDF的几种实现方案
在.NET中,你可以使用Microsoft.Office.Interop.Word库来进行Word到PDF的转换.这是一个示例代码,但请注意这需要在你的系统上安装Microsoft Office. 在 ...
- GO语言基础之基本运算符
GO语言基础之基本运算符 目录 GO语言基础之基本运算符 一.运算符 内置运算符: 二.算术运算符 三.关系运算符 四.逻辑运算符 五.位运算符 六.赋值运算符 一.运算符 作用:运算符用于在程序运行 ...
- Java多线程笔记全过程(一)
一.多线程最基础的基本概念 一个程序最少需要一个进程,而一个进程最少需要一个线程. 我们常说的高并发,也并不全是线程级别的并发,在很多开发语言中,比如PHP,很常见的都是进程级别的并发.但是在Java ...
- 流水线中便捷迭代,鲲鹏DevKit 23.0新能力抢先看
本文分享自华为云社区<鲲鹏DevKit 23.0:流水线中便捷迭代鲲鹏版本,迁移.开发.调优无缝衔接>,作者:华为云社区精选 . 数字时代,海量的行业应用驱动着多样性算力的飞速发展,以鲲鹏 ...
- 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(8) -- 使用Converter类实现内容的转义处理
在我们WPF应用端的时候,和WInform开发或者Vue前端开发一样,有时候也需要对内容进行转义处理,如把一些0,1数值转换为具体含义的文本信息,或者把一些布尔变量转换为是否等,都是常见的转换处理,本 ...
- HDU4841 AHOI1999 圆桌问题 题解
朴素的约瑟夫问题,用vector处理即可 #include <iostream> #include <vector> using namespace std; //AHOI19 ...