在SpringBoot中使用RocketMQ

        Spring Boot因为方便易用,在Java中广泛使用,本章将说明如何在Spring项目中快速使用RocketMQ。

1.直接使用

在Spring Boot项目中,使用某个新的组件第一步通常是加入这个组件的依赖。下面以Maven为例,说明如何在pom.xml中加入RocketMQ的依赖,如代码清单8-1所示。

代码清单8-1 Maven方式的RocketMQ依赖

<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-client</artifactId>
    <version>4.2.0</version>
</dependency>

 

有了这个依赖,就可以在Spring Boot项目中开发RocketMQ的Producer和Consumer程序了。

使用RocketMQ集群,有很多参数要设置,我们可以在application.properties文件里加入自己命名的参数,然后通过@Value注解引入。几个重要的参数是:NameServer的地址、GoupName名称和Topic名称。此外还有一些针对Producer或Consumer的参数,可以写到properties文件里,也可以写到程序里。

依赖配置都做好以后,就可以着手开发Producer和Consumer程序了。我们可以把发送消息和消费消息的功能封装成Service,供其他代码引用。Producer和Consumer的初始化比较慢,不建议每发一个消息或者消费一个消息就启动和注销对应的Object,所以适合把初始化操作代码写到@PostConstruct函数里,把关闭操作代码写到@PreDestroy函数里。Spring Boot项目中的Producer程序示例如代码清单8-2所示。

代码清单8-2 Spring Boot项目中的Producer服务

@Service
public class ProducerService {
private DefaultMQProducer producer = null;
    @PostConstruct
    public void initMQProducer() {
        producer = new DefaultMQProducer(“producerGoupName”);
        producer.setNamesrvAddr(metaqNameserver);
        producer.setRetryTimesWhenSendFailed(3);
        try {
            producer.start();
        } catch (MQClientException e) {
            e.printStackTrace();
        }
    }
    public void send(String topic, String msg) {
        Message msg = new Message(topic, "", "", msg.getBytes());

        try {
            producer.send(msg);
            return;
        } catch (Exception e) {
            e.printStackTrace();
        }
            return;
    }
    @PreDestroy
    public void shutDownProducer() {
        if (producer != null) {
            producer.shutdown();
        }
    }
}

 

使用Consumer的方式和使用Producer类似,但是具体设置会因为使用的具体Class不同而不同。调用shutdown函数是必要的,否则可能因为程序被强制关闭而丢消息。

2.通过Spring Messaging方式使用

直接使用的方式比较简单,也足够灵活,但不是很符合Spring风格,Spring Boot对于消息传递,有统一的接口模板,基于这个模板可以对接各种类型的消息通信组件,比如Kafka、RabbitMQ、RocketMQ等。使用这种方式,其基于不同消息队列收发消息的代码类似,方便在不同的消息队列间切换。

具体使用流程分为三个步骤:添加依赖、配置参数和引入模板。添加RocketMQ插件示例,如代码清单8-3所示。

代码清单8-3 Spring Boot的RocketMQ插件

<!--在pom.xml中添加依赖-->
<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>spring-boot-starter-rocketmq</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>

 

如果mvn找不到这个依赖,可以在GitHub上下载源码,本地构建。

然后是在properties文件中加入配置选项,如代码清单8-4所示。

代码清单8-4 Spring Boot的RocketMQ相关配置选项

## application.properties
spring.rocketmq.name-server=127.0.0.1:9876
spring.rocketmq.producer.group=my-group
spring.rocketmq.producer.retry-times-when-send-async-failed=0
spring.rocketmq.producer.send-msg-timeout=300000
spring.rocketmq.producer.compress-msg-body-over-howmuch=4096
spring.rocketmq.producer.max-message-size=4194304
spring.rocketmq.producer.retry-another-broker-when-not-store-ok=false
spring.rocketmq.producer.retry-times-when-send-failed=2

 

更多的配置选项,可以到源码中查找。由于Spring Boot项目和RocketMQ项目变化很快,具体如何以Spring Messaging的方式发送和接收消息,大家可以自行搜索相关的示例和说明。最新的文档可以参考Spring Boot文档的Messaging部分,以及GitHub中的rocketmq-externals项目。

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

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

相关文章

Spark---介绍及安装

一、Spark介绍 1、什么是Spark Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行计算框架&#xff0c;Spark拥有Hadoop MapReduce所具有的优点&#xff1b;但…

[ruby on rails]rack-cors, rack-attack

gem rack-attack gem rack-cors1. rack-attack 可以根据ip、域名等设置黑名单、设置访问频率 设置黑名单 # 新增 config/initializers/rack_attack.rb # 请求referer如果匹配不上设置的allowed_origins&#xff0c;返回403 forbidden Rack::Attack.blocklist(block bad domai…

各类Linux操作系统如何选择?

各类Linux操作系统如何选择&#xff1f; 企业级应用&#xff1a;RHEL/CentOS 桌面平台&#xff1a;Ubuntu 开源服务器&#xff1a;CentOS 1.1 RedHart 1.1.1RHEL RHEL是指Red Hat Enterprise Linux&#xff0c;是由Red Hat公司开发和维护的一款商业Linux操作系统。它是基于…

钩子函数-hook

钩子函数-hook hook 的作用 利用钩子函数可以在所有测试用例执行前做一些预置操作&#xff08;如&#xff1a;准被测试数据、测试环境&#xff09; 或者在测试结束后做一些后置操作&#xff08;如&#xff1a;清理测试数据&#xff09; 钩子函数在其它框架中也有&#xff0…

如何在公网环境下使用内网穿透工具实现用ipad pro进行代码开发

文章目录 前言1. 本地环境配置2. 内网穿透2.1 安装cpolar内网穿透(支持一键自动安装脚本)2.2 创建HTTP隧道 3. 测试远程访问4. 配置固定二级子域名4.1 保留二级子域名4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问6. iPad通过软件远程vscode6.1 创建TCP隧道 7. ipad远…

特殊文件(Properties属性文件)

一&#xff0c;为啥要学特殊文件 二&#xff0c; 常用方法:读取 三&#xff0c;案例 import java.io.FileReader; import java.util.Properties; import java.util.Set;public class Main {public static void main(String[] args) throws Exception {//1,创建一个键值对对象P…

vim 文件在linux不换行,只显示^M解决办法

训练模型&#xff0c;生成train.log文件&#xff0c;vi 查看&#xff0c;无分行&#xff0c;直接瞎眼。 搜了很久&#xff0c;终于找到解决方案&#xff1a;在vim的命令模式中输入:%s/\r/\r/g这样就好了。

大势浏览器DasViewer里面的查询和选择功能,如何实现与矢量数据关联?

答&#xff1a;矢量数据目前得是大势这边软件生产的才可以进行关联。 DasViewer是由大势智慧自主研发的免费的实景三维模型浏览器,采用多细节层次模型逐步自适应加载技术,让用户在极低的电脑配置下,也能流畅的加载较大规模实景三维模型,提供方便快捷的数据浏览操作。

如何解决requests库自动确定认证arded 类型

requests 库是一种非常强大的爬虫工具,可以用于快速构建高效和稳定的网络爬虫程序。对于经常使用爬虫IP用来网站爬虫反爬策略的我来说&#xff0c;下面遇到的问题应当值得我们思考一番。 问题背景 在使用requests库进行网络请求时&#xff0c;有时会遇到需要对目标服务进行认证…

Hive客户端hive与beeline的区别

hive与beeline简介 1、背景2、hive3、beeline4、hive与beeline的关系 1、背景 Hive的hive与beeline命令都可以为客户端提供Hive的控制台连接。两者之间有什么区别或联系吗&#xff1f; Hive-cli(hive)是Hive连接hiveserver2的命令行工具&#xff0c;从Hive出生就一直存在&…

基于Java封装继承多态实现的一个简单图书系统

首先我们大概了解下图书系统的需求 1.要有两种身份 管理员和普通用户。普通用户和管理员分别对应的功能不一样&#xff0c;需要分开实现 2. 图书系统肯定要有图书&#xff0c;和存放图书的地方&#xff0c;存放就用数组来实现 3.实现对应用户的功能 接下来我们第一步&#xf…

【开源】基于JAVA的学生日常行为评分管理系统

项目编号&#xff1a; S 010 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S010&#xff0c;文末获取源码。} 项目编号&#xff1a;S010&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.2.1 登录注册模块2.2…

Threejs_07 环境、透明度、纹理、ao、光照等贴图的渲染

老陈打码 继续学习老陈threejs 支持&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 下面用到的所有图片、资源、hdr文件都是老陈打码的原资源 链接&#xff1a;https://pan.baidu.com/s/1WWWHgekCIH7OnjI7S_3ZtQ 提取码&#xff1a;6666 Thre…

掌握Java核心知识,轻松应对面试挑战!

问题&#xff1a;什么是对象流ObjectInputStream&#xff1f;如何使用对象流ObjectInputStream在Java中读取对象的数据&#xff1f; 回答&#xff1a; 对象流ObjectInputStream是Java中用于读取对象的数据的输入流。它继承自InputStream类&#xff0c;可以实现对Java对象的序列…

最新外链系统强势来袭

1、支持微信短链&#xff08;h5跳转二维码、小程序&#xff09; 2、支持在线短链生成&#xff08;长链接转短链&#xff09; 3、支持活码生成 4、支持抖音卡片&#xff08;抖音跳转微信二维码、小程序&#xff09; 5、支持抖音二维码扫码跳转微信&#xff08;二维码、h5、小程序…

关系数据库理论【数据库系统概论】

1.问题的提出 1.1关系模式的表示 关系模式由五部分组成&#xff0c;是一个五元组:R&#xff08;U&#xff0c;D&#xff0c;DOM&#xff0c;F&#xff09; 元组概念R关系名R是符号化的元组语义。UU为一组属性。比如学号&#xff0c;姓名。DD为属性组U中的属性所来自的域。比…

国学短剧《我是小影星》栏目火热开拍

近日&#xff0c;国学短剧《我是小影星》栏目花絮拍摄&#xff0c;在上海市徐汇区漕溪路595号A座B1层开拍。该节目招募全国各地的有才华&#xff0c;有表现力怀揣梦想的小朋友来参与节目拍摄。节目旨在以中华传统文化为切入点&#xff0c;通过戏剧、歌舞、音乐等多种艺术形式的…

什么是泛型编程和模板技术?C语言中如何实现泛型编程?

泛型编程是一种编程范式&#xff0c;其目标是编写可以在不同数据类型上工作的通用代码&#xff0c;而无需为每种数据类型编写特定的实现。这使得程序员能够编写更加通用、灵活和可复用的代码。在C语言中&#xff0c;虽然没有直接的泛型编程支持&#xff0c;但可以使用模板技术来…

opencv将32位深图片合成视频跳帧解决办法

在合成视频时候&#xff0c;大多数的图片都是24位深度的&#xff08;即RGB三通道&#xff0c;一个通道8位&#xff09;&#xff0c;但是也存在少量的32位深的图片&#xff08;RGBA&#xff0c;三个颜色通道加上A这个透明度通道&#xff09;&#xff0c;32位和24位的格式是不一样…

html页面直接使用elementui Plus时间线 + vue3

直接上效果图 案例源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"../js/vue3.3.8/vue.global.js"></script><link rel"styles…