Spring Boo集成RocketMQ

news2024/11/25 13:27:23

一、介绍

  • Producer:生产者,用来发送消息
  • Consumer:消费者,用来消费消息
  • NameServer:服务注册中心,用于注册生产者、消费者,存储Broker路由 并提供给生产者和消费者
  • Broker:用于存储消息

在这里插入图片描述

项目结构如下:
首先一个父目录:SpringBoot-RocketMQ
然后下面分别是三个子目录:
生产者:springboot-dubbo-provider
接口:springboot-dubbo-interface
消费者:springboot-dubbo-consumer
(由于复用的之前dubbo项目,目录名称没有改过来)
项目源码我挂在github上面了,直接拉取master分支即可:https://github.com/shengwanping/SpringBoot-RocketMQ
在这里插入图片描述

二、构建项目

1、pom配置

1、SpringBoot-RocketMQ中pom.xml加入:

 <!--dependencyManagement 依赖管理,子项目不会继承父依赖,需要重新声明-->
    <dependencyManagement>
        <dependencies>
            <!-- spring-boot依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.3.12.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- rocketmq-apache -->
            <dependency>
                <groupId>org.apache.rocketmq</groupId>
                <artifactId>rocketmq-spring-boot-starter</artifactId>
                <version>2.2.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

2、springboot-dubbo-provider中pom.xml加入:

 <dependencies>
        <!--引入 springboot-dubbo-interface 接口服务-->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>springboot-dubbo-interface</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- springboot 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- rocketmq-apache -->
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>
    </dependencies>

3、springboot-dubbo-consumer中pom.xml加入:

<dependencies>
        <!--引入 springboot-dubbo-interface 接口服务-->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>springboot-dubbo-interface</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- springboot 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- rocketmq-apache -->
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>
    </dependencies>

4、springboot-dubbo-interface 只是一个接口工具包,pom.xml中不需要额外配置

2、yaml配置

1、生产者application.yml配置如下

server:
  port: 8010

rocketmq:
  name-server: localhost:9876 # 连接Rocketmq Name Server服务注册中心
  producer: # 生产者
    group: producer-one # 生产者组.随意取名

2、消费者application.yml配置如下

server:
  port: 8011

rocketmq:
  name-server: localhost:9876 # 连接Rocketmq Name Server服务注册中心
  producer: # 消费者者
    group: consumer-one # 消费者组.随意取名

3、实现类

1、接口工具包下面只有一个接口:

public interface DemoService {

    void sendHello();
}

2、生产者包下有两个类:
这里用启动类直接调用了接口

package org.dubbo.provider;

import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.dubbo.DemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 模拟 消息生产者
 */
@Service("demoService")
public class DemoServiceImpl implements DemoService {
    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    @Override
    public void sendHello() {
        // 向Proder发送消息                topic           发送的消息
        rocketMQTemplate.convertAndSend("topic_001", "Hello RocketMQ");

    }
}
package org.dubbo.provider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class ProviderApplication {
    public static void main(String[] args) {
        // 获取上下文
        ConfigurableApplicationContext context = SpringApplication.run(ProviderApplication.class, args);
        // 模拟Controller调用这个接口(启动后直接调用sendHello()方法,发送消息)
        DemoServiceImpl demoService = (DemoServiceImpl) context.getBean("demoService");
        demoService.sendHello();
    }
}

3、消费者包下有两个类:

package org.dubbo.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}
package org.dubbo.consumer;

import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;

/**
 * 消息 消费者
 */
@Component
// 指定topic 和 消费者组
@RocketMQMessageListener(topic = "topic_001", consumerGroup = "${rocketmq.producer.group}")
public class ConsumerMode implements RocketMQListener<String> { // 继承RocketMQListener接口


    @Override
    public void onMessage(String s) {
        System.out.println("收到的消息是:"+s);
    }
}

完成了如上配置,生产者和消费者的代码就完成了,然后需要启动rocketmq的NameServer(路由注册中心)和BrokerServer

三、RocketMQ

如何启动NameServer和Broker请参考下面这篇文章:
RocketMQ下载,RocketMQ可视化控制台下载

四、启动生产者和消费者

启动 NameServer和Broker 之后我们启动生产者和消费者 这时如果在消费者下面打印“收到的消息是:Hello RocketMQ”,则说明成功了。
在这里插入图片描述
如果有安装启动RocketMQ可视化管理平台,我们还能在上面清晰看到生产者发送的消息
在这里插入图片描述
本人也是刚刚学习RocketMQ,有什么不足的欢迎大家留言交流!

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

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

相关文章

【源码】Java版云HIS系统:公立二甲医院应用三年 系统运行稳定、功能齐全

SaaS模式Java版云HIS系统源码&#xff0c;拥有自主知识产权&#xff0c;采用前后端分离架构&#xff0c;前端由Angular语言、JavaScript开发&#xff1b;后端使用Java语言开发。具有强大的可扩展性&#xff0c;二次开发方便快捷。 文末卡片获取联系&#xff01; SaaS模式Java版…

Python 开发-批量 FofaSRC 提取POC 验证

数据来源 学习内容和目的&#xff1a; ---Request 爬虫技术&#xff0c;lxml 数据提取&#xff0c;异常护理&#xff0c;Fofa 等使用说明---掌握利用公开或 0day 漏洞进行批量化的收集及验证脚本开发Python 开发-某漏洞 POC 验证批量脚本---glassfish存在任意文件读取在默认4…

canal admin管理端配置(二)

下载安装 下载地址&#xff1a; 下载解压即可 配置 修改canal.admin-1.1.5\conf\application.yml server:port: 8089 #端口根据是否冲突修改 spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT8spring.datasource:address: 192.0.16.12:3306#数据库ip和端口…

Day09-网页布局实战定位

文章目录网页布局实战一 表格案例1-单元格的合并案例2-随堂练习二 定位1 文档流2 position 共有四个属性值:3 固定定位案例1-右下角广告案例2-头部固定案例3-div居中4 相对定位案例1-基础案例案例2-文字居于水平线中间5 绝对定位案例1-基础案例6 定位的层次关系 z-index案例1踩…

免费下载丨一看即会,Serverless 技术进阶必读百宝书

过去一年&#xff0c;全球正在加速推进云计算的 Serverless 化进程。Serverless 架构已经逐渐从“被接受”走向了“被学习”和“被应用”。云的产品体系正在 Serverless 化&#xff0c;从计算、存储、数据库到中间件&#xff0c;越来越多的云产品采用了 Serverless 模式。服务器…

筑基九层 —— 指针详解

目录 前言&#xff1a; 指针详解 前言&#xff1a; 1.CSDN由于我的排版不怎么好看&#xff0c;我的有道云笔记比较美观&#xff0c;请移步有道云笔记 2.修炼必备 1&#xff09;入门必备&#xff1a;VS2019社区版&#xff0c;下载地址&#xff1a;Visual Studio 较旧的下载 -…

现代卷积神经网络(GoogleNet),并使用GoogleNet进行实战CIFAR10分类

专栏&#xff1a;神经网络复现目录 本章介绍的是现代神经网络的结构和复现&#xff0c;包括深度卷积神经网络&#xff08;AlexNet&#xff09;&#xff0c;VGG&#xff0c;NiN&#xff0c;GoogleNet&#xff0c;残差网络&#xff08;ResNet&#xff09;&#xff0c;稠密连接网络…

【Hello Linux】进程控制 (内含思维导图)

作者&#xff1a;小萌新 专栏&#xff1a;Linux 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;简单介绍下进程的控制 包括进程启动 进程终止 进程等待 进程替换等概念 进程控制介绍进程创建fork函数fork函数的返回值fork函数的使用…

利用Cookie劫持+HTML注入进行钓鱼攻击

目录 HTML注入和cookie劫持&#xff1a; 发现漏洞 实际利用 来源 HTML注入和cookie劫持&#xff1a; HTML注入漏洞一般是由于在用户能够控制的输入点上&#xff0c;由于缺乏安全过滤&#xff0c;导致攻击者能将任意HTML代码注入网页。此类漏洞可能会引起许多后续攻击&#…

高德地图绘制图层

效果图&#xff1a; //初始数据 data(){return{//地图map:{address:,map:null,//当前鼠标绘制mouseTool:null,//当前编辑polyEditor:null,//覆盖物的绘制点【用于编辑】mouseToolArr:[],//覆盖物的poly对象polyArr:[],//地图右侧功能按钮signNumber:0,//保存提交的覆盖物的点数…

win10添加右键菜单打开VSCode

当进入一个文件夹后&#xff0c;想右键直接打开我的工程&#xff0c;用发现没有vscode项。 我了方便&#xff0c;把 VSCode添加到右键菜单吧。 1. 在桌面新建一个txt文档&#xff0c;用文本编辑器打开 2. 查看vscode所在位置 在桌面找到vscode快捷键图标&#xff0c;右键--&g…

2023年考PMP真的有用吗?含备考资料分享~

对于项目管理者来说&#xff0c;是真的有用&#xff0c;前提是你真的学进去了&#xff0c;是为了学习而考&#xff0c;而不是为了考证而考&#xff0c;考试的作用不是为了让你得到证书&#xff0c;而是考校你的水平&#xff0c;知识是知识&#xff0c;经验是经验&#xff0c;缺…

【浅学Java】MySQL索引七连炮

MySQL索引面试七连炮0. 谈一下你对索引的理解1. MySQL索引原理和数据结构能介绍一下吗2. B树和B树的区别3. MySQL聚簇索引和非聚簇索引的区别4. 使用MySQL索引都有什么原则4.1 回表4.2 索引覆盖4.3 最左匹配4.4 索引下推5. 不同的存储引擎是如何进行数据的存储的6. MySQL组合索…

根据文件内容批量更改文件名称

注意的问题&#xff1a; ★★★待处理的文件顺序要与excel中新的文件名称顺序一致&#xff0c;我直接复制文件地址到excel中顺序与原来顺序不一样&#xff0c;也不能通过排序得到原来的顺序&#xff0c;这里给出一种解决办法&#xff0c;具体步骤见2数据预处理阶段。 1. 这是我…

最新版本OpenAI怎么调试--用Postman调试最新版OpenAI-API

动动小手指&#xff0c;去到openai的API介绍页面。 https://platform.openai.com/docs/api-reference/models 通过官网的提示&#xff0c;可以copy对应的调试命令进行测试。 本文主要通过curl命令实现。 打开Postman&#xff0c;对&#xff0c;就是那个测试接口用的postman ​…

浙江首场千人大会现场爆满!实在智能九哥专题演讲:企业数字化转型,从实在RPA开始!

为帮助众多电商商家探索数字时代下新赛道、新趋势、新方向&#xff0c;制定有目标、有节奏的全年生意规划&#xff0c;“未来电商高峰论坛暨电商生态赋能大会”于3月4日在杭州正式拉开序幕。本次大会旨在向品牌电商企业主、运营操盘手分享数字电商时代的黄金趋势及运营策略&…

【C++】30h速成C++从入门到精通(继承)

继承的概念及定义继承的概念继承&#xff08;inheritance&#xff09;机制是面向对象程序设计使代码可以复用的重要手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象程序…

数据结构——链表OJ题目讲解(1)

作者&#xff1a;几冬雪来 时间&#xff1a;2023年3月7日 内容&#xff1a;数据结构链表OJ题目讲解 题目来源&#xff1a;力扣和牛客 目录 前言&#xff1a; 刷题&#xff1a; 1.移出链表元素&#xff1a; 2.链表的中间结点&#xff1a; 3. 链表中倒数第k个结点&#xff1…

第六届省赛——8移动距离(总结规律)

题目&#xff1a;X星球居民小区的楼房全是一样的&#xff0c;并且按矩阵样式排列。其楼房的编号为1,2,3...当排满一行时&#xff0c;从下一行相邻的楼往反方向排号。比如&#xff1a;当小区排号宽度为6时&#xff0c;开始情形如下&#xff1a;1 2 3 4 5 612 11 10 9 8 713 14 1…

【论文简述】MVSTER: Epipolar Transformer for EfficientMulti-View Stereo(ECCV 2022)

一、论文简述 1. 第一作者&#xff1a;Xiaofeng Wang 2. 发表年份&#xff1a;2022 3. 发表期刊&#xff1a;ECCV 4. 关键词&#xff1a;MVS、3D重建、Transformer、极线几何 5. 探索动机&#xff1a;融合多视图代价体很关键&#xff0c;现有的方法效率低&#xff0c;引入…