搭建RocketMQ

系统环境准备

  1. 64位操作系统,推荐使用Linux、Unix、MacOS
  2. 64位 JDK1.8+
  3. Maven 3.2.x
  4. 适用于Broker服务器的4g +可用磁盘

下载与搭建

下载

从Apache RocketMQ的官网【http://rocketmq.apache.org/ 】可以进入RocketMQ的下载地址,目前最新的版本为4.5.2【http://rocketmq.apache.org/release_notes/release-notes-4.5.2/ 】,下载Binary文件即可

搭建

  • 解压缩

    unzip rocketmq-all-4.5.2-bin-release.zip

  • 切换目录

    cd rocketmq-all-4.5.2-bin-release

  • 启动Name Server

    nohup sh bin/mqnamesrv &

    验证是否启动成功

    tail -f ~/logs/rocketmqlogs/namesrv.log

    如果启动成功,可以看见如下日志:

    2019-10-24 16:20:48 INFO FileWatchService - FileWatchService service started

    2019-10-24 16:20:48 INFO main - The Name Server boot success. serializeType=JSON

  • 启动Broker

    nohup sh bin/mqbroker -n localhost:9876 &

    验证是否启动成功

    tail -f ~/logs/rocketmqlogs/broker.log

    如果启动成功,可以看见如下日志:

    2019-10-25 10:46:16 INFO brokerOutApi_thread_2 - register broker[0]to name server localhost:9876 OK

PS:默认启动Broker要求的内存非常的高,往往会因为内存不足的原因导致broker启动失败:

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error='Cannot allocate memory' (errno=12)

这时,需要调整bin文件夹中的 runbroker.sh文件,调整,修改:

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"

发送消息与接收消息

发送消息【生产消息】

执行如下命令

export NAMESRV_ADDR=localhost:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

可以看见如下输出

SendResult [sendStatus=SEND_OK, msgId=C0A81F650E80511D50C07DE6317903E7, offsetMsgId=C0A81F6500002A9F000000000002BDFE, messageQueue=MessageQueue [topic=TopicTest, brokerName=fanxuan-TM1604, queueId=3], queueOffset=249]

接收消息【消息消息】

执行如下命令

sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

可以看见如下输出

ConsumeMessageThread_20 Receive New Messages: [MessageExt [queueId=1, storeSize=180, queueOffset=174, sysFlag=0, bornTimestamp=1571971437603, bornHost=/192.168.31.101:49768, storeTimestamp=1571971437604, storeHost=/192.168.31.101:10911, msgId=C0A81F6500002A9F000000000001E9A6, commitLogOffset=125350, bodyCRC=1257100577, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=250, CONSUME_START_TIME=1571971518424, UNIQ_KEY=C0A81F650E80511D50C07DE6302302B9, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 54, 57, 55], transactionId='null'}]]

关闭服务器

停止 broker:sh bin/mqshutdown broker

停止 nameserver:sh bin/mqshutdown namesrv

搭建RocketMQ控制台

下载源码

git clone https://github.com/apache/rocketmq-externals.git

代码修改

修改配置

修改rocketmq-externals/rocketmq-console/src/main/resources/application.properties文件:

  • server.port:默认端口8080,容易与其他端口冲突,建议修改
  • rocketmq.config.namesrvAddr:name server地址,localhost:9876

修改依赖

修改rocketmq-externals/rocketmq-console/pom.xml文件:

rocketmq.version改为你自己的版本

PS:建议使用4.5.1,4.5.2版本会导致MQAdminExtImpl报错

修改代码

找到org.apache.rocketmq.console.service.impl.MessageServiceImpl文件,修改queryMessageByTopic方法中的

DefaultMQPullConsumer consumer = new DefaultMQPullConsumer(MixAll.TOOLS_CONSUMER_GROUP, null);

为:

RPCHook rpcHook = null;

DefaultMQPullConsumer consumer = new DefaultMQPullConsumer(MixAll.TOOLS_CONSUMER_GROUP, rpcHook);

另外需要引入包:

import org.apache.rocketmq.remoting.RPCHook;

编译启动

打开终端,切换到rocketmq-console目录下,重新构建项目:

mvn clean package -DskipTests

编译成功:

[INFO] --- maven-source-plugin:3.0.1:jar (attach-sources) @ rocketmq-console-ng ---

[INFO] Building jar: /home/fanxuan/Server/RocketMQ/rocketmq-externals/rocketmq-console/target/rocketmq-console-ng-1.0.1-sources.jar

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 12.404 s

[INFO] Finished at: 2019-10-25T12:35:19+08:00

[INFO] ------------------------------------------------------------------------

target文件夹中找到新编译好的包,启动:

java -jar rocketmq-console-ng-1.0.1.jar

启动成功之后,浏览器,输入localhost:8888【修改配置中修改的server.port值】

RocketMQ控制台说明

apache官方文档:https://github.com/apache/rocketmq-externals/blob/master/rocketmq-console/doc/1_0_0/UserGuide_CN.md 详细介绍了RocketMQ使用文档

运维

  • 你可以修改这个服务使用的navesvr的地址(enter,更新)
  • 你可以修改这个服务是否使用VIPChannel(如果你的mq server版本小于3.5.8,请设置不使用)

驾驶舱

  • 查看broker的消息量(总量/5分钟图)
  • 查看单一主题的消息量(总量/趋势图)

集群

  • 查看集群的分布情况

    • cluster与broker关系
    • broker
  • 查看broker具体信息/运行信息
  • 查看broker配置信息

主题

  • 展示所有的主题,可以通过搜索框进行过滤
  • 筛选 普通/重试/死信 主题
  • 添加/更新主题
    • clusterName 创建在哪几个cluster上
    • brokerName 创建在哪几个broker上
    • topicName 主题名
    • writeQueueNums 写队列数量
    • readQueueNums 读队列数量
    • perm //2是写 4是读 6是读写
  • 状态 查询消息投递状态(投递到哪些broker/哪些queue/多少量等)
  • 路由 查看消息的路由(现在你发这个主题的消息会发往哪些broker,对应broker的queue信息)
  • CONSUMER管理(这个topic都被哪些group消费了,消费情况何如)
  • topic配置(查看变更当前的配置)
  • 发送消息(向这个主题发送一个测试消息)
  • 重置消费位点(分为在线和不在线两种情况,不过都需要检查重置是否成功)
  • 删除主题 (会删除掉所有broker以及namesvr上的主题配置和路由信息)

消费者页面

  • 展示所有的消费组,可以通过搜索框进行过滤
  • 刷新页面/每隔五秒定时刷新页面
  • 按照订阅组/数量/TPS/延迟 进行排序
  • 添加/更新消费组
    • clusterName 创建在哪几个集群上
    • brokerName 创建在哪几个broker上
    • groupName 消费组名字
    • consumeEnable //是否可以消费 FALSE的话将无法进行消费
    • consumeBroadcastEnable //是否可以广播消费
    • retryQueueNums //重试队列的大小
    • brokerId //正常情况从哪消费
    • whichBrokerWhenConsumeSlowly//出问题了从哪消费
  • 终端 在线的消费客户端查看,包括版本订阅信息和消费模式
  • 消费详情 对应消费组的消费明细查看,这个消费组订阅的所有Topic的消费情况,每个queue对应的消费client查看(包括Retry消息)
  • 配置 查看变更消费组的配置
  • 删除 在指定的broker上删除消费组

发布管理页面

  • 通过Topic和Group查询在线的消息生产者客户端

    • 信息包含客户端主机 版本

消息查询页面

  • 根据Topic和时间区间查询 *由于数据量大 做多只会展示2000条,多的会被忽略
  • 根据Topic和Key进行查询
    • 最多只会展示64条
  • 根据消息主题和消息Id进行消息的查询
  • 消息详情可以展示这条消息的详细信息,查看消息对应到具体消费组的消费情况(如果异常,可以查看具体的异常信息)。可以向指定的消费组重发消息。

HTTPS 方式访问Console

  • HTTPS功能实际上是使用SpringBoot提供的配置功能即可完成,首先,需要有一个SSL KeyStore来存放服务端证书,可以使用本工程所提供的测试密钥库:

    resources/rmqcngkeystore.jks, 它可以通过如下keytool命令生成
#生成库并以rmqcngKey别名添加秘钥
keytool -genkeypair -alias rmqcngKey -keyalg RSA -validity 3650 -keystore rmqcngkeystore.jks
#查看keystore内容
keytool -list -v -keystore rmqcngkeystore.jks
#转换库格式
keytool -importkeystore -srckeystore rmqcngkeystore.jks -destkeystore rmqcngkeystore.jks -deststoretype pkcs12
  • 配置resources/application.properties, 打开SSL的相关选项, 启动console后即开启了HTTPS.
#设置https端口
server.port=8443 ### SSL setting
#server.ssl.key-store=classpath:rmqcngkeystore.jks
#server.ssl.key-store-password=rocketmq
#server.ssl.keyStoreType=PKCS12
#server.ssl.keyAlias=rmqcngkey

登录访问Console

在访问Console时支持按用户名和密码登录控制台,在操作完成后登出。需要做如下的设置:

  • 在Spring配置文件resources/application.properties中修改 开启登录功能
# 开启登录功能
rocketmq.config.loginRequired=true # Dashboard文件目录,登录用户配置文件所在目录
rocketmq.config.dataPath=/tmp/rocketmq-console/data
  • 确保${rocketmq.config.dataPath}定义的目录存在,并且该目录下创建登录配置文件"users.properties", 如果该目录下不存在此文件,则默认使用resources/users.properties文件。

    users.properties文件格式为:
# 该文件支持热修改,即添加和修改用户时,不需要重新启动console
# 格式, 每行定义一个用户, username=password[,N] #N是可选项,可以为0 (普通用户); 1 (管理员) #定义管理员
admin=admin,1 #定义普通用户
user1=user1
user2=user2
  • 启动控制台则开启了登录功能

Spring Cloud Alibaba学习笔记(9) - RocketMQ安装与RocketMQ控制台的更多相关文章

  1. Spring Cloud Alibaba学习笔记(1) - 整合Spring Cloud Alibaba

    Spring Cloud Alibaba从孵化器版本毕业:https://github.com/alibaba/spring-cloud-alibaba,记录一下自己学习Spring Cloud Al ...

  2. Spring Cloud Alibaba学习笔记

    引自B站楠哥:https://space.bilibili.com/434617924 一.创建父工程 创建父工程hello-spring-cloud-alibaba Spring Cloud Ali ...

  3. Spring Cloud Alibaba学习笔记(15) - 整合Spring Cloud Gateway

    Spring Cloud Gateway 概述 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于Netty.Reactor以及WEbFlux构建,它 ...

  4. Spring Cloud Alibaba学习笔记(2) - Nacos服务发现

    1.什么是Nacos Nacos的官网对这一问题进行了详细的介绍,通俗的来说: Nacos是一个服务发现组件,同时也是一个配置服务器,它解决了两个问题: 1.服务A如何发现服务B 2.管理微服务的配置 ...

  5. Spring Cloud Alibaba学习笔记(3) - Ribbon

    1.手写一个客户端负载均衡器 在了解什么是Ribbon之前,首先通过代码的方式手写一个负载均衡器 RestTemplate restTemplate = new RestTemplate(); // ...

  6. Spring Cloud Alibaba学习笔记(22) - Nacos配置管理

    目前业界流行的统一配置管理中心组件有Spring Cloud Config.Spring Cloud Alibaba的Nacos及携程开源的Apollo,本文将介绍Nacos作为统一配置管理中心的使用 ...

  7. Spring Cloud Alibaba学习笔记(14) - Spring Cloud Stream + RocketMQ实现分布式事务

    发送消息 在Spring消息编程模型下,使用RocketMQ收发消息 一文中,发送消息使用的是RocketMQTemplate类. 在集成了Spring Cloud Stream之后,我们可以使用So ...

  8. Spring Cloud Alibaba学习笔记(10) - Spring消息编程模型下,使用RocketMQ收发消息

    编写生产者 集成 添加依赖 <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId&g ...

  9. Spring Cloud Alibaba学习笔记(12) - 使用Spring Cloud Stream 构建消息驱动微服务

    什么是Spring Cloud Stream 一个用于构建消息驱动的微服务的框架 应用程序通过 inputs 或者 outputs 来与 Spring Cloud Stream 中binder 交互, ...

  10. Spring Cloud Alibaba学习笔记(23) - 调用链监控工具Spring Cloud Sleuth + Zipkin

    随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请求可能最终需要调用很多次后端服务才能完成,当整个请求陷入性能瓶颈或不可用时,我们是无法得知该请求是由某个或某些后端服务引起的,这时就需要解决如何 ...

随机推荐

  1. [hadoop in Action] 第3章 Hadoop组件

    管理HDFS中的文件 分析MapReduce框架中的组件 读写输入输出数据   1.HDFS文件操作   [命令行方式]   Hadoop的文件命令采取的形式为: hadoop fs -cmd < ...

  2. ThoughtWorks持续集成平台GO开源了

    ThoughtWorks 持续集成平台Go最近宣布开源了.其基于Apache 2.0 开源协议. Go下载地址为http://www.go.cd/download/. 下面是几张来自官方的视图: GO ...

  3. Asp.net WebAPI 单元测试

    现在Asp.net webapi 运用的越来越多,其单元而是也越来越重要.一般软件开发都是多层结构,上层调用下层的接口,而各层的实现人员不同,一般大家都只写自己对应单元测试.对下层的依赖我们通过IOC ...

  4. linear model for classification

    不同error function比较

  5. COST CUTTING THE ALAN GREENBERG WAY

    AnatBird.com COST CUTTING THE ALAN GREENBERG WAY

  6. Android多线程文件下载器

    本应用实现的是输入文件的网络的地址,点击button開始下载,下载过程中有进度条和后面的文本提示进度, 下载过程中button不可点击,防止反复的下载,完成下载后会进行Toast的提示显示, 而且回复 ...

  7. 位运算,算术、逻辑运算详解-java篇

    /** * 功能: * 位运算符,原码.反码.补码规则: * 1.二进制的最高位是符号位:0表示正数,1表示负数 * 2.正数的原码.反码.补码都一样 * 3.负数的反码=它的原码符号位不变,其他位取 ...

  8. Angular服务的5种创建方式

    config配置块 Angular应用的运行主要分为两部分:app.config()和app.run(),config是你设置任何的provider的阶段,从而使应用可以使用正确的服务,需要注意的是在 ...

  9. Django之 Form和ModelForm组件

    01-Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用 ...

  10. docker下载镜像与替换默认源

    1.常用源 中科大docker源:https://mirrors.ustc.edu.cn/docker-ce/ 使用参考文档:http://mirrors.ustc.edu.cn/help/docke ...