RocketMq知识点整理

[TOC]

1、概述

一些最佳实践

2、部署安装

参考这里通过docker方式安装

现在 /Users/software/rocketmq/conf 目录下新建一个文件 broker.conf ,在里面加入内容,这些内容也是RocketMq官方的默认配置。

注意brokerIP1 和 namesrvAddr需要修改为,如果在本机时使用127.0.0.1实测在管理后台方面会有一些功能无法正常使用

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1=10.120.16.17
namesrvAddr=10.120.16.17:9876

docker compass如下,通过指令 docker-compose up -d 启动一个rockermq的docker容器

version: '2'
services:
  namesrv:
    image: rocketmqinc/rocketmq
    container_name: rmqnamesrv
    ports:
      - 9876:9876
    command: sh mqnamesrv
  broker:
    image: rocketmqinc/rocketmq
    container_name: rmqbroker
    ports:
      - 10909:10909
      - 10911:10911
      - 10912:10912
    volumes:
      - /Users/software/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf
    #command: sh mqbroker -n namesrv:9876
    command: sh mqbroker -n namesrv:9876 -c ../conf/broker.conf
    depends_on:
      - namesrv
    environment:
      - JAVA_HOME=/usr/lib/jvm/jre
  console:
    image: styletang/rocketmq-console-ng
    container_name: rocketmq-console-ng
    ports:
      - 8087:8080
    depends_on:
      - namesrv
    environment:
      - JAVA_OPTS= -Dlogging.level.root=info   -Drocketmq.namesrv.addr=rmqnamesrv:9876 
      - Dcom.rocketmq.sendMessageWithVIPChannel=false

之后就可以使用端口9876访问RocketMq了,访问管理后台可以使用链接 http://127.0.0.1:8087/#/

3、Spring boot代码对接

疑难杂症

Docker环境下广播消息无法接收到消息

这个问题如果确认topic等参数没错,就要注意容器是否能正常建立 {用户目录}/logs/rocketmqlogs/rocketmq_client.log 这个目录以及文件,如果不是root用户需要在Dockerfile里提前建立这个目录。

另外Docker环境下运行RocketMq程序比较特殊,因为其无状态无法记录容器重启前的消费者ID,也就无法记录消费到的消息序号。所以可能要根据具体业务情况做一些灵活调整。如果是广播类型的消息,消息消费起点应该用CONSUME_FROM_LAST_OFFSET,否则会导致比较严重的重复消费。如果是集群类型的消息,就应该选择CONSUME_FROM_FIRST_OFFSET务必确保消息消费彻底。

各种消费起点的含义如下

    /**
     * 一个新的订阅组第一次启动从队列的最后位置开始消费,后续再启动接着上次消费的进度开始消费
     */
    CONSUME_FROM_LAST_OFFSET,
    /**
     * 一个新的订阅组第一次启动从队列的最前位置开始消费,后续再启动接着上次消费的进度开始消费
     */
    CONSUME_FROM_FIRST_OFFSET,
    /**
     * 一个新的订阅组第一次启动从指定时间点开始消费,后续再启动接着上次消费的进度开始消费,时间点设置参见DefaultMQPushConsumer.consumeTimestamp参数
     */
    CONSUME_FROM_TIMESTAMP,

4、参考资料

Spring boot 接入Rocketmq1
Spring boot 接入Rocketmq2

你可能感兴趣的:(RocketMq知识点整理)