前言

随着互联网的兴起,越来越多的用户开始享受科技带来的便利,对于服务的压力也日益增大,随即便有了高并发、高性能、高可用等各种解决方案,这里主要介绍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的更多相关文章

  1. 阿里云RocketMQ定时/延迟消息队列实现

    新的阅读体验:http://www.zhouhong.icu/post/157 一.业务需求 需要实现一个提前二十分钟通知用户去做某件事的一个业务,拿到这个业务首先想到的最简单得方法就是使用Redis ...

  2. [原创]阿里云RocketMQ踩过的哪些坑

    由于公司的最近开始使用RocketMQ来做支付业务处理, 便开启了学习阿里云RocketMQ的学习与实践之路, 其中踩了不少的坑, 大部份是由于没有仔细查看阿里云的技术文档而踩的坑. 但是有一个非常大 ...

  3. spring boot集成阿里云短信发送接收短信回复功能

    1.集成阿里云通信发送短信: 在pom.xml文件里添加依赖 <!--阿里短信服务--> <dependency> <groupId>com.aliyun</ ...

  4. 阿里云RocketMQ的生产者简单实现

    // MQ的应用场景有比如 订单变更消息可以通过产生这个事件的地方(比如前端调用后端的接口post一个订单,那么就是在这个mapping方法里做一个生产者[不过最好通过aop来实现,不然n多个接口都要 ...

  5. Springboot下实现阿里云短信验证功能(含代码)

    Springboot下实现阿里云短信验证功能 一 开通阿里云短信服务 阿里云官网注册登录 找到短信服务并开通 打开短信服务的管理台 在国内消息那栏中添加签名管理和模板管理(按照格式要求去写) 在右上角 ...

  6. 在线工具生成接入信息mqtt.fx快速接入阿里云

    在线工具生成接入信息mqtt.fx快速接入阿里云 在使用阿里云获取的三元组信息进行接入的时候,往往需要加密生成接入信息之后才能进行接入,因此我根据阿里云提供的加密工具实现了一个阿里云物联网平台mqtt ...

  7. django之集成阿里云通信(发送手机短信验证码)

    python3 + django2.0 集成 "阿里云通信" 服务: (SDK文档地址:https://help.aliyun.com/document_detail/55491. ...

  8. Springboot集成阿里云短信

    目录 1 前言 2 准备工作 2.1 了解流程 2.2 配置信息 2.3 短信签名和模板 2.3.1 签名 2.3.2 模板 2.3.3 存入数据库 3 SDK 4 集成Springboot 4.1 ...

  9. Springboot项目之阿里云OSS快速入门

    阿里云oss 阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云对外提供的海量.安全.低成本.高可靠的云存储服务.您可以通过本文档提供的简单的REST接口,在任何 ...

  10. Spring boot实战项目整合阿里云RocketMQ (非开源版)消息队列实现发送普通消息,延时消息 --附代码

    一.为什么选择RocketMQ消息队列? 首先RocketMQ是阿里巴巴自研出来的,也已开源.其性能和稳定性从双11就能看出来,借用阿里的一句官方介绍:历年双 11 购物狂欢节零点千万级 TPS.万亿 ...

随机推荐

  1. Jquery ajax方式提交表单

    Jquery ajax方式提交表单,目前用过的有两种方式: 1.引人jquery.js和jquery.easyui.min.js后,用下面的方法: $('#checkForm1').form('sub ...

  2. Solution -「洛谷 P5046」「YunoOI 2019 模拟赛」Yuno loves sqrt technology I

    Description Link. 无修改区间求逆序对. Solution 首先有一个显然的 \(\Theta(N\sqrt{N}\log_{2}N)\) 做法,由于过不了所以我就不废话. 其实有了 ...

  3. Vue 搭配 Spring MVC 创建一个 web 项目

    Vue 搭配 Spring MVC 创建一个 web 项目 想要写一个登录的web应用程序.页面使用Vue,后端使用Spring MVC,最终打成war包,放在tomcat下启动. 1.创建Sprin ...

  4. 爬虫系列——requests

    文章目录 一 介绍 二 基于GET请求 三 基于POST请求 四 响应Response 五 高级用法 一 介绍 介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,reques ...

  5. Python正则表达式——常用re正则表达式集合

    文章目录 一.校验数字的表达式 二.校验字符的表达式 三.特殊需求表达式 一.校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^ ...

  6. How can I access GPT-4?

    How can I access GPT-4?   Written by Joshua J.. Updated over a week ago API Access Most users will n ...

  7. 文心一言 VS 讯飞星火 VS chatgpt (118)-- 算法导论10.3 3题

    三.用go语言,在ALLOCATE-OBJECT和 FREE-OBJECT过程的实现中,为什么不需要设置或重置对象的 prev 属性呢? 文心一言: 在 Go 语言中,ALLOCATE-OBJECT ...

  8. 合并果子(lgP1090)

    贪心. 每次取最小的两堆合并,最后即为正确答案.(我也不会证明/wq) 所以说主要问题就是怎么找最小的两堆. 由于中间不断有插入和删除,所以用优先队列. 扯不下去了 直接看代码吧. #include& ...

  9. NewsCenter

    打开界面有一个搜索框 抓包查看是post形式提交的数据包 这时候试试sql注入,万能密码直接全都显示,那就说明存在sql注入漏洞 这里试试用sqlmap自动注入试试(POST类型的sql注入第一次尝试 ...

  10. HTML基础_01

    HTML 基础_01 01.初识 HTML 什么是 HTML! Hyper Text Markup Language(超文本标记语言).超文本包括文字.图片.音频.视频.动画等. HTML5,提供了一 ...