rocketmq 初探(一)

大家好,我是烤鸭:

    今天看下rocketmq。这篇主要是简单介绍下 rocketmq以及idea 本地调试 rocketmq。

项目架构

感兴趣的可以下载源码看下。

https://github.com/apache/rocketmq

项目结构图。
在这里插入图片描述

rocketmq-acl: acl 秘钥方式的鉴权,用在broker端。
rocketmq-broker:整个mq的核心,他能够接受producer和consumer的请求,并调用store层服务对消息进行处理。HA服务的基本单元,支持同步双写,异步双写等模式。
rocketmq-client:mq客户端实现,目前官方仅仅开源了java版本的mq客户端,c++,go客户端有社区开源贡献。
rocketmq-common:一些模块间通用的功能类,比如一些配置文件、常量。
rocketmq-distribution:脚本、配置模块。
rocketmq-example:官方提供的例子。
rocketmq-filtersrv:消息过滤服务,相当于在broker和consumer中间加入了一个filter代理。
rocketmq-logappender:日志
rocketmq-logging:日志
rocketmq-namesrv:NameServer,类似服务注册中心,broker在这里注册,consumer和producer在这里找到broker地址
rocketmq-openmessaging:RocketMQ支持openmessaging,详见:https://rocketmq.apache.org/docs/openmessaging-example/
rocketmq-remoting:基于netty的底层通信实现,所有服务间的交互都基于此模块。
rocketmq-srvut:解析命令行的工具类。
rocketmq-store:存储层实现,同时包括了索引服务,高可用HA服务实现。
rocketmq-tools:命令行工具,提供了消息查询等功能。

下面重点说一下几个模块:

注册中心 namesrv、broker、client 和 store,先看一下关系。
在这里插入图片描述

看这个图是不是有点相似,没错,跟 dubbo 很像,除了多了 broker。

nameserver 是注册中心,用来记录broker信息、broker和topic关系。

producer 从nameserver 获取broker信息,进行消息发送。

consumer 从nameserver 获取broker信息,进行消息消费。

idea 导入源码,本地调试

设置 rocketmq _home 目录,后边的namesrv和broker会用到。新建conf目录,并将 rocket-distribution 的conf里的broker.conf、logback_broker.xml、

logback_namesrv.xml、logback_tools.xml 复制到新建的conf目录中。我这里设置的目录是 E:\my\rocketmq

在这里插入图片描述

我这里修改了日志目录,方便查看日志。

启动 NamesrvStartup

Connected to the target VM, address: '127.0.0.1:58819', transport: 'socket'
Please set the ROCKETMQ_HOME variable in your environment to match the location of the RocketMQ installation
Disconnected from the target VM, address: '127.0.0.1:58819', transport: 'socket'

启动参数配置 rocketmq_home 的环境变量,ROCKETMQ_HOME=E:\my\rocketmq

在这里插入图片描述

启动成功:

Connected to the target VM, address: '127.0.0.1:50261', transport: 'socket'
The Name Server boot success. serializeType=JSON

会发现 rocketmq_home 目录下生成了 logs/rocketmqlogs 目录,存放的是日志文件。

启动broker

设置启动参数和 rocketmq_home 的环境变量 :

autoCreateTopicEnable=true 是为了测试的时候可以发送时创建topic,默认是 false(不建议开启,避免并发发送时,topic重复问题)

-c E:\my\rocketmq\conf\broker.conf -n localhost:9876 autoCreateTopicEnable=true
ROCKETMQ_HOME=E:\my\rocketmq

在这里插入图片描述

会发现 rocketmq_home 目录下生成了 store 目录,存放的是broker维护的信息,像消费者的偏移量、延迟队列的偏移量、topic。

启动consumer

rocketmq-example 项目下,example\src\main\java\org\apache\rocketmq\example\quickstart\Consumer.java

指定broker地址:

consumer.setNamesrvAddr("localhost:9876");

在这里插入图片描述

启动producer并发送消息

rocketmq-example 项目下,example\src\main\java\org\apache\rocketmq\example\quickstart\Producer.java

指定broker地址,修改循环次数为2次:

producer.setNamesrvAddr("localhost:9876");

发送成功:

SendResult [sendStatus=SEND_OK, msgId=7F000001395C18B4AAC22C7A99940000, offsetMsgId=0AA80D1200002A9F0000000000000000, messageQueue=MessageQueue [topic=TopicTest, brokerName=broker-a, queueId=3], queueOffset=0]
SendResult [sendStatus=SEND_OK, msgId=7F000001395C18B4AAC22C7A99D80001, offsetMsgId=0AA80D1200002A9F00000000000000C9, messageQueue=MessageQueue [topic=TopicTest, brokerName=broker-a, queueId=0], queueOffset=0]

消费端接收成功:

ConsumeMessageThread_1 Receive_1 New Messages: [MessageExt [brokerName=broker-a, queueId=3, storeSize=201, queueOffset=0, sysFlag=0, bornTimestamp=1625815032213, bornHost=/10.168.13.18:57729, storeTimestamp=1625815032241, storeHost=/10.168.13.18:10911, msgId=0AA80D1200002A9F0000000000000000, commitLogOffset=0, bodyCRC=613185359, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=1, CONSUME_START_TIME=1625815055025, UNIQ_KEY=7F000001395C18B4AAC22C7A99940000, CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 48], transactionId='null'}]] 
ConsumeMessageThread_2 Receive_1 New Messages: [MessageExt [brokerName=broker-a, queueId=0, storeSize=201, queueOffset=0, sysFlag=0, bornTimestamp=1625815032280, bornHost=/10.168.13.18:57729, storeTimestamp=1625815032282, storeHost=/10.168.13.18:10911, msgId=0AA80D1200002A9F00000000000000C9, commitLogOffset=201, bodyCRC=1401636825, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=1, CONSUME_START_TIME=1625815056025, UNIQ_KEY=7F000001395C18B4AAC22C7A99D80001, CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 49], transactionId='null'}]] 

当发送的时候 store目录下会生成 commitLog 目录(消息内容)和consumequeue目录(存的是topic和queueId)

commitLog目录 默认上来生成两个文件,2个G。

在这里插入图片描述

consumequeue目录,一级子目录是topic,二级子目录是queueId

在这里插入图片描述

mq 控制台

rocketmq-console 在另一个仓库,地址:

https://github.com/apache/rocketmq-externals/tree/master/rocketmq-console

启动成功,画面还是比较清新的:

在这里插入图片描述

模拟发送100条,可以看到每个broker的数量:

在这里插入图片描述

console功能还是有很多可以再开发的地方,官方基本不维护了,需要的可能得二次开发了。

像我们就开发了类似报表、报警、监控等一些功能,还是比较方便的。

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

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

相关文章

[css] 说说浏览器解析CSS选择器的过程?

[css] 说说浏览器解析CSS选择器的过程? 按照从上到下,从右到左的顺序解析。个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

客户将数据库迁移上云的常用办法

下载网站:www.SyncNavigator.CN 客服QQ1793040---------------------------------------------------------- 关于HKROnline SyncNavigator 注册机价格的问题 HKROnline SyncNavigator 8.4.1 非破解版 注册机 授权激活教程 最近一直在研究数据库同步的问题,在网上…

基于nchan打造百万用户的聊天室

大家好,我是烤鸭: 这次介绍下nchan,nginx的一个module。 nchan 源码: https://github.com/slact/nchan 官网: https://nchan.io/ nginx 配置说明文档: https://nchan.io/documents/nginxconf2016-slides.pdf 测试环境搭建 4 台linux cent…

springboot 获取控制器参数的几种方式

这里介绍springboot 获取控制器参数有四种方式 1、无注解下获取参数 2、使用RequestParam获取参数 3、传递数组 4、通过URL传递参数 无注解下获取参数无注解下获取参数,需要控制器层参数与HTTP请求栏参数名称一致,这样后台就可以获取到请求栏的参数。 /*…

rocketmq 初探(二)

大家好,我是烤鸭: 上一篇简单介绍和rocketmq,这一篇看下源码之注册中心。 namesrv 先看两个初始化方法 NamesrvController.initialize() 和 NettyRemotingServer.start(); public boolean initialize() {// 加载配置文件this.kvConfigMana…

[css] 说说你对line-height是如何理解的?

[css] 说说你对line-height是如何理解的? line-height 行高,就是两行文字之间基线的距离,用来调整文字的行间距。个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 …

2 JVM 运行机制

转载于:https://www.cnblogs.com/likevin/p/10186591.html

[css] 要让Chrome支持小于12px的文字怎么做?

[css] 要让Chrome支持小于12px的文字怎么做? 1, 改用图片 2, 使用 -webkit-text-size-adjust:none; 但是不支持chrome 27.0以上版本 3, 使用 transform: scale( )缩小 暂时不知道更多方法了个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易…

rocketmq 初探(三)

大家好,我是烤鸭: 上一篇介绍了注册中心,这一篇看下broker。基于 rocketmq 4.9 版本。 BrokerStartup#BrokerController 按照代码的先后顺序撸源码: BrokerController.createBrokerController public static BrokerController…

WIN10远程连接时提示内部错误

微软官方的解决方案是重置远程连接设置,步骤如下: 1、以管理员身份运行命令提示符 2、输入以下命令: netsh winsoc reset 随后会提示重启电脑,遂解决。 3、重启后还不行的话,再试试删除掉远程连接保存的凭据&#xff0…

[css] css的属性content有什么作用呢?有哪些场景可以用到?

[css] css的属性content有什么作用呢&#xff1f;有哪些场景可以用到&#xff1f; content属性与 ::before 及 ::after 伪元素配合使用生成文本内容通过attr()将选择器对象的属性作为字符串进行显示&#xff0c;如&#xff1a;a::after{content: attr(href)} <a href"h…

rocketmq 初探(四)

大家好&#xff0c;我是烤鸭&#xff1a; 上一篇简单介绍broker的初始化&#xff0c;这一篇介绍 NettyRequestProcessor 的实现(主要是broker里用到的)。 AdminBrokerProcessor、ClientManageProcessor、ConsumerManageProcessor、EndTransactionProcessor NettyRequestProce…

iOS 去除警告 看我就够了

你是不是看着开发过程中出现的一堆的警告会心情一阵烦躁&#xff0c;别烦躁了&#xff0c;看完此文章&#xff0c;消除警告的小尾巴。 一、SVN 操作导致的警告 1.svn删除文件后报错 ”xx“is missing from working copy 使用命令sudo find 工程项目路径 -name ".svn"…

[css] 什么是FOUC?你是如何避免FOUC的?

[css] 什么是FOUC&#xff1f;你是如何避免FOUC的&#xff1f; FOUC 即 Flash of Unstyled Content&#xff0c;是指页面一开始以样式 A&#xff08;或无样式&#xff09;的渲染&#xff0c;突然变成样式B。 原因是样式表的晚于 HTML 加载导致页面重新进行绘制。通过 import 方…

rocketmq 初探(五)

大家好&#xff0c;我是烤鸭&#xff1a; 上一篇简单介绍部分 NettyRequestProcessor (AdminBrokerProcessor、ClientManageProcessor、ConsumerManageProcessor、EndTransactionProcessor)&#xff0c;这一篇介绍其他的。 PullMessageProcessor、QueryMessageProcessor、Repl…

Python 装饰器初探

Python 装饰器初探 在谈及Python的时候&#xff0c;装饰器一直就是道绕不过去的坎。面试的时候&#xff0c;也经常会被问及装饰器的相关知识。总感觉自己的理解很浅显&#xff0c;不够深刻。是时候做出改变&#xff0c;对Python的装饰器做个全面的了解了。 1. 函数装饰器 直接上…

[css] 解释下 CSS sprites的原理和优缺点分别是什么

[css] 解释下 CSS sprites的原理和优缺点分别是什么 我来说下我的观点 原理&#xff1a; 多张图合并成一张图优点&解决的问题hover效果&#xff0c;如果是多个图片&#xff0c;网络正常的情况下首次会闪烁一下。如果是断网情况下&#xff0c;就没图片了。sprites 就很好的…

《自律100天,穿越人生盲点》读书笔记

大家好&#xff0c;我是烤鸭&#xff1a; 《自律100天&#xff0c;穿越人生盲点》&#xff0c;读书笔记。 第一章 “自律100天”的华丽开启 第一节 “自律100天”的底层逻辑 习惯没办法用金钱换&#xff0c;只能用时间。 训练延迟满足(增强自控、培养耐心、减少短期诱惑…

递推数列

题目描述 给定a0,a1,以及anpa(n-1) qa(n-2)中的p,q。这里n > 2。 求第k个数对10000的模。 输入描述: 输入包括5个整数&#xff1a;a0、a1、p、q、k。 输出描述: 第k个数a(k)对10000的模。 分析 循环求出ak即可 #include <iostream>using namespace std;int main(){in…

[css] 请描述margin边界叠加是什么及解决方案

[css] 请描述margin边界叠加是什么及解决方案 1&#xff0c;使用padding代替&#xff0c;但是父盒子要减去相应的高度 2&#xff0c;使用boder&#xff08;透明&#xff09;代替&#xff08;不推荐&#xff0c;不符合书写规范&#xff0c;如果父盒子子盒子时有颜色的不好处理&…