• Spring Cloud Alibaba学习笔记(9)


    搭建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
    
    • 启动控制台则开启了登录功能
  • 相关阅读:
    [LeetCode] Best Time to Buy and Sell Stock
    [LeetCode] Generate Parentheses
    [LeetCode] Best Time to Buy and Sell Stock 2
    [CareerCup][Google Interview] 打印组合
    [微软][笔试] 找出最大序列对
    系统之间的接口测试
    进销存业务的自定义分解
    查找数据库中所有有自增列的用户表
    由创建文件想起的。。。
    反编译想到的代码安全问题
  • 原文地址:https://www.cnblogs.com/fx-blog/p/11732749.html
Copyright © 2020-2023  润新知