一、RocketMQ安装(单机)

  1、RocketMQ下载 :Apache 官方下载网址:https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.3.0/rocketmq-all-4.3.0-source-release.zip

            或者GitHub 官方下载网址:https://github.com/apache/rocketmq

  2、将下载RocketMQ上传至linux

    rz

  3、将上传的RocketMQ解压

    unzip rocketmq-all-4.3.0-source-release.zip

  4、编译部署

    ①在解压后生成的RocketMQ文件夹下:cd rocketmq-all-4.3.0/,

    ②使用 Maven 来编译整个项目  mvn -Prelease-all -DskipTests clean install -U

    大约5分钟后出现如下内容表示部署成功

[INFO] Reactor Summary:
[INFO]
[INFO] Apache RocketMQ 4.3.0 4.3.0 ........................ SUCCESS [02:48 min]
[INFO] rocketmq-logging 4.3.0 ............................. SUCCESS [ 17.417 s]
[INFO] rocketmq-remoting 4.3.0 ............................ SUCCESS [ 11.507 s]
[INFO] rocketmq-common 4.3.0 .............................. SUCCESS [ 8.931 s]
[INFO] rocketmq-client 4.3.0 .............................. SUCCESS [ 14.016 s]
[INFO] rocketmq-store 4.3.0 ............................... SUCCESS [ 8.584 s]
[INFO] rocketmq-srvutil 4.3.0 ............................. SUCCESS [ 2.288 s]
[INFO] rocketmq-filter 4.3.0 .............................. SUCCESS [ 2.438 s]
[INFO] rocketmq-broker 4.3.0 .............................. SUCCESS [ 7.253 s]
[INFO] rocketmq-tools 4.3.0 ............................... SUCCESS [ 3.480 s]
[INFO] rocketmq-namesrv 4.3.0 ............................. SUCCESS [ 1.642 s]
[INFO] rocketmq-logappender 4.3.0 ......................... SUCCESS [ 2.533 s]
[INFO] rocketmq-openmessaging 4.3.0 ....................... SUCCESS [ 3.220 s]
[INFO] rocketmq-example 4.3.0 ............................. SUCCESS [ 1.757 s]
[INFO] rocketmq-test 4.3.0 ................................ SUCCESS [ 5.503 s]
[INFO] rocketmq-distribution 4.3.0 4.3.0 .................. SUCCESS [ 51.228 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 05:13 min
[INFO] Finished at: 2018-08-10T01:14:58+08:00
[INFO] ------------------------------------------------------------------------
[root@localhost rocketmq-all-4.3.0]#

 5、启动nameserver

  ①进入目录: /usr/rocketmq/rocketmq-all-4.3.0/distribution/target/apache-rocketmq 

  ②执行 nohup sh bin/mqnamesrv &

  ③执行 tail -f ~/logs/rocketmqlogs/namesrv.log,出现以下内容表示nameserver启动成功 

[root@localhost apache-rocketmq]# pwd
/usr/local/rocketmq-all-4.3.0/distribution/target/apache-rocketmq
[root@localhost apache-rocketmq]# nohup sh bin/mqnamesrv &
[1] 5865
[root@localhost apache-rocketmq]# nohup: 忽略输入并把输出追加到"nohup.out"
tail -f ~/logs/rocketmqlogs/namesrv.log
2018-08-10 01:29:12 INFO main - tls.client.keyPath = null
2018-08-10 01:29:12 INFO main - tls.client.keyPassword = null
2018-08-10 01:29:12 INFO main - tls.client.certPath = null
2018-08-10 01:29:12 INFO main - tls.client.authServer = false
2018-08-10 01:29:12 INFO main - tls.client.trustCertPath = null
2018-08-10 01:29:13 INFO main - Using OpenSSL provider
2018-08-10 01:29:14 INFO main - SSLContext created for server
2018-08-10 01:29:14 INFO NettyEventExecutor - NettyEventExecutor service started
2018-08-10 01:29:14 INFO main - The Name Server boot success. serializeType=JSON
2018-08-10 01:29:14 INFO FileWatchService - FileWatchService service started

6、启动broker

  ①同样进入 RocketMQ 安装目录下的  /usr/rocketmq/rocketmq-all-4.3.0/distribution/target/apache-rocketmq 目录

  ②执行nohup sh bin/mqbroker -n localhost:9876 autoCreateTopicEnable=true &

  ③执行tail -f ~/logs/rocketmqlogs/broker.log

    如果看到 "The broker[%s, xxx.xx.xx.xx:10911] boot success..." ,则表示启动成功

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

      #
      # There is insufficient memory for the Java Runtime Environment to continue.
      # Native memory allocation (mmap) failed to map 8589934592 bytes for committing reserved memory.
      # An error report file with more information is saved as:
      # /usr/local/rocketmq-all-4.3.0/distribution/target/apache-rocketmq/hs_err_pid7209.log
    说明内存不足,解决办法:

        ①打开目录rocketmq-all-4.3.0/distribution/target/apache-rocketmq/bin找到nameserver和broker的 runbroker.sh 和 runserver.sh       

        ②runserver.sh 文件中 修改 JVM 配置下的第一行,将原来 4g 调小一点
        #===========================================================================================
        # JVM Configuration
        #===========================================================================================
        #JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
        JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
        JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -    

          。。。。      

        $JAVA ${JAVA_OPT} $@
        ③runbroker.sh 文件中 修改 JVM 配置下的第一行,将原来 8g 调小一点        

            #===========================================================================================
            # JVM Configuration
            #===========================================================================================
            #JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
            JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m"
            JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -              XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8"
              。。。。。
            #JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
            JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
            JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
        ④然后再次启动 broker 时就成功了,broker 注册到了 nameserver 上了(localhost:9876

 

  注意,如果出现出现connect to 172.17.42.1:10911 failed异常处理方案:

  1、目录rocketmq-all-4.3.0/distribution/conf/broker.conf中添加nameserver=127.0.0.1:9876(该地址固定的)

                           添加brokerip1=192.168.80.4(rocketmq安装服务器地址)

  2、启动broker:nohup sh mqbroker -n localhost:9876 -c ../conf/broker.conf &

 

7、关闭broker和nameserver  

  sh bin/mqshutdown broker
  sh bin/mqshutdown namesrv

 

8、rocketmq查看指令

目录:cd distribution/target/apache-rocketmq/bin

  首先进入 RocketMQ 工程,进入/RocketMQ/bin 在该目录下有个 mqadmin 脚本 .
  查看帮助: 在 mqadmin 下可以查看有哪些命令
  a: 查看具体命令的使用 : sh mqadmin
  b: sh mqadmin help 命令名称
  例如,查看 updateTopic 的使用
  sh mqadmin help updateTopic
  2. 关闭nameserver和所有的broker:
  进入到bin下:
  sh mqshutdown namesrv
  sh mqshutdown broker
  3. 查看所有消费组group:
  sh mqadmin consumerProgress -n 192.168.1.23:9876
  4. 查看指定消费组下的所有topic数据堆积情况:
  sh mqadmin consumerProgress -n 192.168.1.23:9876 -g warning-group
  5. 查看所有topic :
  sh mqadmin topicList -n 192.168.1.23:9876
  6. 查看topic信息列表详情统计
  sh mqadmin topicstatus -n 192.168.1.23:9876 -t topicWarning
  7. 新增topic
  sh mqadmin updateTopic –n 192.168.1.23:9876 –c DefaultCluster –t topicWarning
  8. 删除topic
  sh mqadmin deleteTopic –n 192.168.1.23:9876 –c DefaultCluster –t topicWarning

  9、查询集群消息
  sh mqadmin clusterList -n 192.168.1.23:9876

 

二、RocketMQ可视化界面安装

  1、下载文件 https://github.com/apache/rocketmq-externals ,上传到linxu

  2、解压 unzip rocketmq-externals-master.zip 解压文件

  3、修改配置文件;(usr/local/rocketmq-externals-master/目录下)

    find -name application.properties 可以查看到两个文件都在rocketmq-console文件目录下

    vim application.properties

    rocketmq.config.namesrvAddr=linux服务器ip:9876(ip1:port;ip2:port)

    server.port=8081  --(这里端口号为访问这个可视化界面的端口号)

  4、编译 usr/local/rocketmq-externals-master/rocketmq-console/目录下

    执行mvn clean package -Dmaven.test.skip=true

    编译成功后,在rocketmq-console目录下会生成一个目录:target目录,该目录下有启动rocketmq界面的jar文件

  5、.启动web(usr/local/rocketmq-externals-master/rocketmq-console/target目录下)
    先创建文件夹目录 mkdir /soft  mkdir RocketMQ   mkdir rocketmqlogs 
    执行nohup java -jar rocketmq-console-ng-1.0.1.jar >>/soft/RocketMQ/rocketmqlogs/log.out 2>&1 &
      --注意rocketmq-console-ng-1.0.1.jar和安装版本rocketmq-console/target目录下jar包相关的

  6、本地浏览器执行  http://192.168.80.4:8081/#/topic 便可以了

 

 二、基于docker安装rocketmq

1、  拉取rocketmq镜像

docker pull rocketmqinc/rocketmq

 

2、  拉取rocketmq-console镜像

docker pull styletang/rocketmq-console-ng

 

3、  启动nameserver

docker run -d -p 9876:9876 -v `pwd`/data/namesrv/logs:/root/logs -v `pwd`/data/namesrv/store:/root/store --name rmqnamesrv rocketmqinc/rocketmq sh mqnamesrv

 

4、 启动broker

docker run -d -p 10911:10911 -p 10909:10909 -v `pwd`/data/broker/logs:/root/logs -v `pwd`/data/broker/store:/root/store --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" rocketmqinc/rocketmq sh mqbroker -c ../conf/broker.conf

 

由于启动broker时rocketmq默认指定为内网地址,会导致外网无法连接到broker,报出如下错误信息: connect to xxx.xx.xx.xx:10911 failed

解决方案:

  ①docker exec -it xxxxx bash    --xxx是指broker对应的containerid(通过docker ps查看对应containerid)

  ②cd ../conf

  ③vi broker.conf

  ④增加brokerIP1 = xxx.xxx.xxx.xxx  --这里的ip地址指定为外网地址(即服务器地址)

       ⑤重启broker容器

5、 启动rocketmq-console

docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=xxx.xxx.xxx.xxx:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8080:8080 -t styletang/rocketmq-console-ng

--- xxx.xxx.xxx.xxx 为服务器地址

三、模块

 

 

1.OPS

 

 

这里很容易看清楚,双击标签可以修改NameSerIP+Port。这里我测试过修改端口,发现重新发送一样的消息,还是能消费。

其实也能理解,因为NameSer改变了,也只是使得Broker不能从本地获取最新的路由信息。但是本地还是缓存了路由信息,所以一样的Topic还是能获取到路由信息,可以获取到路由信息还是能发送到Brokder

所以这里我的测试是一次失败的对照测试,但是这个模块平时需求不大,就过了。

2.Dashboard

 

 

此图表较简单,其实是指所有Brokder处理消息的数量。比如从上图可以看出来,我只有一个Brokder,并且此Brokder处理了6条消息。

 

 

此图标可以筛选出某个Topic下5分钟的消息数量。但是可以切换时间,所以就相当于可以查看某个Topic下的消息数量趋势。

这条趋势曲线有时候貌似不准确,测试过几次有一次在那个时间点并没有变化。

3.Cluster

 

 

这里有点坑,Cluster翻译过来叫集群。这里并不是指消费模式中的集群消费,而是指Brokder的集群部署

但是我这里并没有使用Broker的集群部署,所以只有一条数据。如果有多个broker那这里应该有多行数据。

每一行中各项代表的意思如下

  • Broker --- Broker的名字
  • Address --- 地址
  • Today Produce Count --- 今天发送的消息数量
  • Today Consume Count ---- 今天消费的消息数量

4.Topic

Topic算是重点之一。

 

 

这里的ADD/UPDATE是有作用的,可以在这里添加一个Topic,经过测试,感觉在这里意义不大。这里涉及到**消息的发送消费与TopicBroker**的关系,下篇文章分析。

每一行的Topic分成如下几个操作按钮

 

mark

 

点击第一个[status]按钮。显示如下界面。可以从中获取的信息比较多。该消息队列的TopicBrokerNamequeueId

这里涉及到发送消息的原理。简单来说

通过一个Topic可以获取到对应的路由信息,路由信息里面维护了消息队列集合,而我们发送消息其实就是通过消息队列发送

消息队列集合是个集合,所以也是有集合的属性。其中每一项就是消息队列,就是如下图的每一行,每一行在集合中的位置就是queueId

 

mark

 

点击第二项是保存在NameSer的路由信息。

 

mark

 

这里可能要注意下。保存在NameServer的路由信息和本地缓存的不一样,本地缓存的属性内容更丰富更多。看看源码吧!

保存在NameSer的路由对象

public class TopicRouteData extends RemotingSerializable {
    private String orderTopicConf;
    private List<QueueData> queueDatas;
    private List<BrokerData> brokerDatas;
    private HashMap<String/* brokerAddr */, List<String>/* Filter Server */> filterServerTable;
 }
复制代码

发现没,其中包含的属性和如上图片类似。

queueDatasbrokerDatas,其中queueDatas包含消息队列的基本情况,读/写的最大数目,brokerDatas包含Broker的位置信息。

再看看本地的真正路由信息,如上对象是它的属性。

public class TopicPublishInfo {
    private boolean orderTopic = false;
    private boolean haveTopicRouterInfo = false;
    private List<MessageQueue> messageQueueList = new ArrayList<MessageQueue>();
    private volatile ThreadLocalIndex sendWhichQueue = new ThreadLocalIndex();
    private TopicRouteData topicRouteData;
 }
复制代码

这下很明白了。

第三项[Consumer Manage],看名字也知道啥意思,该Topic的消费管理。

第四项[Topic Config],修改Topic的属性,没啥作用,本来代码也可以控制。

第五项[Send Message],向该Topic发送消息。可以测试玩玩,将Consumer配置好,然后运行,不通过代码发送,在这里发送消息,Consumer也能接受到。

 

mark

 

 

mark

 

5.Consumer

 

mark

 

没太看懂这每一行代表啥意思。估计是一个Consumer对象。后面几个按钮点击后,可以看看该Consumer的具体配置信息,好像没啥东西。

6.Message

该模块很重要,信息量也很多。

 

mark

 

比较容易理解,根据如上三项对Message分组查询。一般第一项根据Topic查询比较多。因为据说根据key去查询有坑。建议idTopicid因为唯一最简单。

 

mark

 

这是该Topic下的所有消息,不管是否消费都在内。

Message ID 、Tag 、Key都是消息比较重要的属性。点击右方的按钮,可以看到该消息更加具体的情况。

 

mark

 

注意点都用箭头标出来了,其他可能比较容易理解,无非就那几个属性。最后的TrackType很重要,对于排查问题。该属性的值有好几个,现在看到的几个总结如下

  • CONSUMED 代表该消息已经被消费
  • NOT_CONSUME_YET 还没被消费
  • UNKNOW_EXCEPTION 报错了,可以看日志,一般报错内容会紧跟其后,具体很容易排查出来
  • NOT_ONLINE 代表该Consumer并没有运行

 

参考:https://www.cnblogs.com/pc-m/p/11046848.html

posted on 2019-07-11 07:53  colorfulworld  阅读(1799)  评论(0编辑  收藏  举报