centos7 基于Dledger搭建rocketmq 5.0.0并集成到微服务(1主2从)

news2024/11/15 23:59:46

小伙伴们,你们好呀,我是老寇,好久不见啦,甚是想念。

rocketmq和rocketmq-console安装包:https://pan.baidu.com/s/1swrV9ffJnmz4S0mfkuBbIw 
提取码:1111

1.准备三台主机

192.168.1.1rocketmq,rocketmq-console(机器1 主)
192.168.1.2rocketmq(机器2 从)
192.168.1.3rocketmq(机器3 从)

2.机器1操作

# 将文件移动到/opt/mq目录下
# 解压文件
unzip rocketmq-5.0.0.zip
mv rocketmq-all-5.0.0-bin-release /opt/mq/rocketmq-5.0.0
cd /opt/mq/rocketmq-5.0.0

# 修改配置文件
vim conf/dledger/broker-n0.conf
# 集群名称
brokerClusterName = RaftCluster
# broker组名,同一个RaftClusterGroup内,brokerName名要一样
brokerName=RaftNode00
# 监听端口
listenPort=30911
# 设置NaemServer地址和端口
# 是用分号隔开,不是逗号啊,不然无法集群
namesrvAddr=192.168.1.1:9876;192.168.1.2:9876;192.168.1.3:9876
storePathRootDir=/tmp/rmqstore/node00
storePathCommitLog=/tmp/rmqstore/node00/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
# n0 n1 n2 分别是broker1,broker2,broker3 的 DledgerSelfId
# DlegerPeers=n0-ip:40911...
dLegerPeers=n0-192.168.1.1:40911;n1-192.168.1.2:40912;n2-192.168.1.3:40913
## must be unique
dLegerSelfId=n0
sendMessageThreadPoolNums=16

修改runbroker.sh

 修改runserver.sh

# 后台启动nameserver
nohup sh bin/mqnamesrv > nohubNameserv &

# 后台启动broker
nohup sh bin/mqbroker  > nohubBroker -c conf/dledger/broker-n0.conf &

 3.机器2操作

# 将文件移动到/opt/mq目录下
# 解压文件
unzip rocketmq-5.0.0.zip
mv rocketmq-all-5.0.0-bin-release /opt/mq/rocketmq-5.0.0
cd /opt/mq/rocketmq-5.0.0

# 修改配置文件
vim conf/dledger/broker-n1.conf
# 集群名称
brokerClusterName = RaftCluster
# broker组名,同一个RaftClusterGroup内,brokerName名要一样
brokerName=RaftNode00
# 监听端口
listenPort=30921
# 设置NaemServer地址和端口
# 是用分号隔开,不是逗号啊,不然无法集群
namesrvAddr=192.168.1.1:9876;192.168.1.2:9876;192.168.1.3:9876
storePathRootDir=/tmp/rmqstore/node01
storePathCommitLog=/tmp/rmqstore/node01/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
# n0 n1 n2 分别是broker1,broker2,broker3 的 DledgerSelfId
# DlegerPeers=n0-ip:40911...
dLegerPeers=n0-192.168.1.1:40911;n1-192.168.1.2:40912;n2-192.168.1.3:40913
## must be unique
dLegerSelfId=n1
sendMessageThreadPoolNums=16

修改runbroker.sh

 修改runserver.sh

# 后台启动nameserver
nohup sh bin/mqnamesrv > nohubNameserv &

# 后台启动broker
nohup sh bin/mqbroker  > nohubBroker -c conf/dledger/broker-n1.conf &

4.机器2操作

# 将文件移动到/opt/mq目录下
# 解压文件
unzip rocketmq-5.0.0.zip
mv rocketmq-all-5.0.0-bin-release /opt/mq/rocketmq-5.0.0
cd /opt/mq/rocketmq-5.0.0

# 修改配置文件
vim conf/dledger/broker-n2.conf
# 集群名称
brokerClusterName = RaftCluster
# broker组名,同一个RaftClusterGroup内,brokerName名要一样
brokerName=RaftNode00
# 监听端口
listenPort=30931
# 设置NaemServer地址和端口
# 是用分号隔开,不是逗号啊,不然无法集群
namesrvAddr=192.168.1.1:9876;192.168.1.2:9876;192.168.1.3:9876
storePathRootDir=/tmp/rmqstore/node02
storePathCommitLog=/tmp/rmqstore/node02/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
# n0 n1 n2 分别是broker1,broker2,broker3 的 DledgerSelfId
# DlegerPeers=n0-ip:40911...
dLegerPeers=n0-192.168.1.1:40911;n1-192.168.1.2:40912;n2-192.168.1.3:40913
## must be unique
dLegerSelfId=n2
sendMessageThreadPoolNums=16

修改runbroker.sh

 修改runserver.sh

# 后台启动nameserver
nohup sh bin/mqnamesrv > nohubNameserv &

# 后台启动broker
nohup sh bin/mqbroker  > nohubBroker -c conf/dledger/broker-n2.conf &
# 查看集群状态
sh bin/mqadmin clusterList -n 127.0.0.1:9876

5.启动rocketmq-console(机器1)

# 进入target目录
unzip rocketmq-console.zip

cd /opt/mq/rocketmq-console/target

java -jar rocketmq-console-ng-4.0.0.jar

  

6.集成到微服务

1.导入依赖

        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.20</version>
    </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

2.配置文件

rocketmq:
  name-server: 192.168.1.1:9876
  # 生产者
  producer:
    group: laokou-producer-group

3.代码编写

/**
 * @author Kou Shenhai
 */
@RestController
@RequestMapping("/api")
@Slf4j
@RequiredArgsConstructor
@Api(value = "rocketmq消息API",protocols = "http",tags = "rocketmq消息API")
public class RocketmqSender {

    private final RocketMQTemplate rocketMQTemplate;

    @PostMapping("/send/{topic}")
    @ApiOperation("rocketmq消息>同步发送")
    public void sendMessage(@PathVariable("topic") String topic, @RequestBody RocketmqDTO dto) {
        rocketMQTemplate.syncSend(topic,dto.getData(),3000);
    }

    @PostMapping("/sendAsync/{topic}")
    @ApiOperation("rocketmq消息>异步发送")
    public void sendAsyncMessage(@PathVariable("topic") String topic, @RequestBody RocketmqDTO dto) {
        rocketMQTemplate.asyncSend(topic, dto.getData(), new SendCallback() {
            @Override
            public void onSuccess(SendResult sendResult) {
                log.info("发送成功");
            }

            @Override
            public void onException(Throwable throwable) {
                log.error("报错信息:{}",throwable.getMessage());
            }
        });
    }

    @PostMapping("/sendOne/{topic}")
    @ApiOperation("rocketmq消息>单向发送")
    public void sendOneMessage(@PathVariable("topic") String topic, @RequestBody RocketmqDTO dto) {
        /**
         * 单向发送,只负责发送消息,不会触发回调函数,即发送消息请求不等待
         * 适用于耗时短,但对可靠性不高的场景,如日志收集
         */
        rocketMQTemplate.sendOneWay(topic,dto.getData());
    }

}

@Data
class RocketmqDTO implements Serializable {

    private String data;

}

4.发送消息

rocketmqApiFeignClient.sendOneMessage(RocketmqConstant.LAOKOU_OPERATE_LOG_TOPIC, rocketmqDTO);

5.消费消息

@RocketMQMessageListener(consumerGroup = "laokou-consumer-group", topic = RocketmqConstant.LAOKOU_OPERATE_LOG_TOPIC)
@Component
@RequiredArgsConstructor
public class OperateLogConsumer implements RocketMQListener<String> {

    private final LogApiFeignClient logApiFeignClient;

    @Override
    public void onMessage(String message) {
        final OperateLogDTO operateLogDTO = JacksonUtil.toBean(message, OperateLogDTO.class);
        logApiFeignClient.insertOperateLog(operateLogDTO);
    }

}

后端地址:KCloud-Platform-Official
前端地址:KCloud-Antdv-Official

大功告成

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

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

相关文章

Verilog语法之generate for、generate if、generate case

0、前言 Verilog-2005中有3个generate 语句可以用来很方便地实现重复赋值和例化&#xff08;generate for&#xff09;或根据条件选择性地进行编译&#xff08;generate if和generate case&#xff09;等功能。接下来就一起看下这3个语句的应用场景和应用方法吧。 1、generate …

Hotspot垃圾收集器一览

上篇文章我们介绍了如何判断对象是否为垃圾&#xff0c;有垃圾就要清理&#xff0c;清理就需要 垃圾收集器。 垃圾收集器(Garbage Collector)是垃圾收集GC的实现&#xff0c;根据是否分代收集可将垃圾收集器分为两种类型&#xff1a;分代收集和不分代收集。 分代收集 Serial垃…

多线程编程带来的不安全问题

目录 1.观察线程不安全问题 2.出现线程不安全问题原因 2.1 根本原因 2.2 代码结构 2.3 原子性 2.4 内存可见性问题 2.5指令重排序 3.通过原子性解决线程安全问题 4.synchronized的使用方法 4.1 修饰方法 4.2 修饰代码块 1.观察线程不安全问题 如果多线程环境下代码…

餐饮企业提升用户价值,从基于点单链路的精细化运营开始

近几年&#xff0c;餐饮业的经营增长面临着巨大挑战&#xff0c;在这种情况下&#xff0c;餐饮企业如何提升用户价值&#xff0c;提高多风险下持续增长的动力呢&#xff1f;神策数据杨丽月聚焦用户运营&#xff0c;围绕“一条链路&#xff0c;四个指标”&#xff0c;跟大家分享…

C# 标签式导航

一 标签式导航 使用TabControl控件&#xff0c;将多个页面结合起来&#xff0c;每个标签关联一个页面。 TabControl 选项卡容器&#xff1b; TabPage选项页&#xff1b; 可以在设计器里添加页面&#xff0c;也可以代码方式添加。 操作演示&#xff1a; ① 选中TabControl; ②…

框架skywalking部署笔记

一旦你的程序docker化之后,你会遇到各种问题,比如原来采用的本地记日志的方式就不再方便了,虽然你可以挂载到宿主机,但你使用 --scale 的话,会导致 记录日志异常,所以最好的方式还是要做日志中心化,另一个问题,原来一个请求在一个进程中的痉挛失败,你可以在日志中巡查…

linux的内存映射(二)

我们先来看幅图&#xff1a; Linux内存管理的最底层是buddy内存管理方案&#xff0c;即伙伴算法&#xff0c;管理伙伴算法我们不做详诉&#xff0c;有兴趣的可以自行学习&#xff0c;我们这里只要知道buddy内存池中只能分配2^n个page的内存&#xff0c;比如1,2,4,8……个pages…

前端面试指南之JS面试题总结

1. JS 有哪些数据类型&#xff1f; 根据 JavaScript 中的变量类型传递方式&#xff0c;分为基本数据类型和引用数据类型两大类七种。 基本数据类型包括Undefined、Null、Boolean、Number、String、Symbol (ES6新增)六种。 引用数据类型只有Object一种&#xff0c;主要包括对象…

pve扩展lvm空间,重做物理卷

pve扩展lvm空间&#xff0c;重做物理卷pve扩展lvm空间&#xff0c;重做物理卷必备知识扩展步骤1.查看当前机器状况2.查看盘符3.确定是否有可分配空间4.确定物理卷分配情况5.&#xff08;可略&#xff09;如果你的空闲的盘已经挂载了请用以下命令卸掉6.创建物理卷7.查看卷状态8.…

day7_redis学习

文章目录Geo查找附近商铺BitMap实现用户签到UV统计Geo查找附近商铺 Geo是GeoLocation的简称&#xff0c;代表地理坐标&#xff0c;在Redis 3.2中加入了对Geo的支持&#xff0c;允许存储地理坐标信息&#xff0c;常见的命令有: ①GEOADD key x y member [x2 y2 member]&#xf…

(一)SpringBoot项目初始化并引入基础文件【木字楠后台管理系统模板】

&#x1f3b6; 文章简介&#xff1a;SpringBoot项目初始化并引入基础文件【木字楠后台管理系统模板】 &#x1f4a1; 创作目的&#xff1a;为了带大家完整的体验木字楠后台管理系统模版的开发流程 ☀️ 今日天气&#xff1a;天气☁️很好。太阳晒在身上暖暖的 &#x1f4dd; 每…

IB数学怎么学,HL是什么难易程度,和SL的内容差的大吗?

做为刚大学毕业的M20 IBer&#xff0c;数学课以往一直没下过90%&#xff0c;全是7分&#xff0c;IA 校园内得分19/20。尽管final被IBO赏了个6&#xff08;大考撤销&#xff0c;ibo蒙蔽估分orz&#xff09;&#xff0c;但我还是汇总了一些自身的数学学习工作经验&#xff0c;期待…

一个变量命名神器:支持中文转变量名

变量命名的规范&#xff0c;对于我们编程&#xff0c;大家都知道是非常重要的&#xff0c;上次给大家推荐过一个命名辅助工具《程序员还在为变量取名苦恼&#xff0c;那是因为你不知道&#xff0c;这个变量命名神器》&#xff0c;但大家一致反馈存在2个问题&#xff1a; 1、网…

项目管理(如何进行项目采购管理)

项目采购管理包括从项目团队外部采购或获取所需产品、服务或成果的各个过程。项目采购管 理包括编制和管理协议所需的管理和控制过程,例如,合同、订购单、协议备忘录 (MOA),或服务 水平协议 (SLA)。被授权采购项目所需货物和(或)服务的人员可以是项目团队、管理层或组织采…

使用winhex对fat16文件系统分析

“FAT16”是“File Allocation Table,16-bit”的英文缩写,意思是“文件分配表,16位” 。FAT16文件系统是从微软的DOS 3.0系统开始使用的&#xff0c;它能够支持大于16MB小于2GB的分区&#xff0c;Windows 2000以上操作系统可以创建4GB的FAT16分区&#xff0c;但与传统的FAT16不…

【观察】深度剖析,为什么说帆软的文化决定了FineBI6.0的易用和好用

毫无疑问&#xff0c;今天国家对数字经济给予了前所未有的高度重视&#xff0c;《“十四五”数字经济发展规划》中&#xff0c;就明确将继续坚持推进数字产业化和产业数字化&#xff0c;赋能传统产业转型升级&#xff0c;为构建数字中国提供有力支撑&#xff0c;并提出到2025年…

FFmpeg之硬解码

导读 众所周知&#xff0c;软解码虽然兼容性一流&#xff0c;但是却非常依赖CPU&#xff0c;所以性能消耗笔记大&#xff1b;硬解码使用内置的DSP芯片进行解码&#xff0c;性能高&#xff0c;但是兼容性一般。 虽说硬解码兼容性不太好&#xff0c;但是在实际开发中出于对性能的…

智能化煤矿-设备管理系统、故障诊断、全生命周期管理

随着智能化煤矿的建设&#xff0c;煤矿设备、传感器数量在增加、煤矿设备的自动化、智能化程度也相对提高。保证设备稳定运行&#xff0c;减少故障时间是提高煤矿安全生产的一种重要途径。另外随着信息技术的发展&#xff0c;像云计算、物联网、大数据等相关技术的运用&#xf…

vue2的 webpack-bundle-analyzer 打包体积 看优化包

1、 先安装 npm i webpack-bundle-analyzer -D 2、 vue.config 文件中 配置 /* webpack相关配置 *该对象将会被 webpack-merge 合并入最终的 webpack 配置 */ if (process.env.use_analyzer) { // 分析 config .plugin(webpack-bundle-analyzer) .use(require(webpa…

XuperSocial首个明星DApp上线,探索区块链分布式通信基础设施

12月7日&#xff0c;星际口袋上线星际社区&#xff0c;为广大藏友提供稳定、可信的交流场所。星际社区基于百度超级链团队重磅发布的去平台化社交解决方案XuperSocial搭建&#xff0c;XuperSocial是架设在百度超级链开放网络&#xff08;XuperOS&#xff09;上的DApp&#xff0…