• docker安装rocketMQ并测试


    docker安装rocketMQ并测试

    RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责生产消息,Consumer
    负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器,每个 Broker
    可以存储多个Topic的消息,每个Topic的消息也可以分片存储于不同的 Broker。Message Queue
    用于存储消息的物理地址,每个Topic中的消息地址存储于多个 Message Queue 中。ConsumerGroup
    由多个Consumer 实例构成。

    docker安装rocketMQ,需要至少启动两个容器组件,①是name-server,类似于微服务的注册中心,②是broker,负责存储和转发消息。另外,也可以安装console控制台,便于可视化管理mq,但这个组件不是必须的。

    mqnamesrv

    可以提前pull对应的image,可以直接执行,如果发现没有拉取镜像的话,是可以自动触发拉去镜像的,下同。

    docker run -d \
    --name mqnamesrv \
    -p 9876:9876 \
    -v /docker/volume/rocketmq/data/namesrv/logs:/root/logs \
    -v /docker/volume/rocketmq/data/namesrv/store:/root/store \
    -e "MAX_POSSIBLE_HEAP=100000000" \
    rocketmqinc/rocketmq \
    sh mqnamesrv 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • -e “MAX_POSSIBLE_HEAP=100000000” 设置容器的最大堆内存为100000000
    • sh mqnamesrv 启动mqnamesrv服务

    mqbroker

    宿主机的数据卷统一放到了/docker/volume/rocketmq/下,在该目录下我们创建/conf/broker.conf配置文件,添加一下内容并保存

    # 所属集群名称,如果节点较多可以配置多个
    brokerClusterName = DefaultCluster
    #broker名称,master和slave使用相同的名称,表明他们的主从关系
    brokerName = broker-a
    #0表示Master,大于0表示不同的slave
    brokerId = 0
    #表示几点做消息删除动作,默认是凌晨4点
    deleteWhen = 04
    #在磁盘上保留消息的时长,单位是小时
    fileReservedTime = 48
    #有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制;
    brokerRole = ASYNC_MASTER
    #刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要;
    flushDiskType = ASYNC_FLUSH
    # 设置broker节点所在服务器的ip地址
    brokerIP1 = 这个地方填写宿主机的ip地址
    # 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full
    diskMaxUsedSpaceRatio=95
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    特别注意上面的brokerIP1,需要换成自己对应宿主机的ip地址。

    创建容器

    docker run -d  \
    --name rmqbroker \
    --link mqnamesrv:namesrv \
    -p 10911:10911 \
    -p 10909:10909 \
    -v  /docker/volume/rocketmq/data/broker/logs:/root/logs \
    -v  /docker/volume/rocketmq/data/broker/store:/root/store \
    -v /docker/volume/rocketmq/conf/broker.conf:/opt/rocketmq/conf/broker.conf \
    -e "NAMESRV_ADDR=namesrv:9876" \
    -e "MAX_POSSIBLE_HEAP=200000000" \
    rocketmqinc/rocketmq \
    sh mqbroker -c /opt/rocketmq/conf/broker.conf
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • –link rmqnamesrv:namesrv 和rmqnamesrv容器通信
    • -e “NAMESRV_ADDR=namesrv:9876” 指定namesrv的地址为本机namesrv的ip地址:9876
    • -e “MAX_POSSIBLE_HEAP=200000000” rocketmqinc/rocketmq sh mqbroker 指定broker服务的最大堆内存
    • sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf 指定配置文件启动broker节点

    mqconsole

    docker run -d \
    --name rmq-console \
    -e "JAVA_OPTS=-Drocketmq.namesrv.addr=宿主机IP:9876 \
    -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
    -p 宿主机映射的端口:8080 \
    pangliang/rocketmq-console-ng
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • JAVA_OPTS=-Drocketmq.namesrv.addr后面需要换成宿主机的ip,端口9876是我们上面启动name-server映射到宿主机的端口。
    • -p后面,需要设定一个宿主机空闲的端口,通过这个端口,web端可以访问console页面。

    启动后,直接通过ip加上端口,就可以访问控制台页面了。

    在这里插入图片描述

    test

    再通过一个简单的发送消息代码测试一下

        private final RocketMQTemplate rocketMQTemplate;
    
        /**
         * 发送消息的实例
         */
        public void sendMessage(String topic, String msg) {
            rocketMQTemplate.convertAndSend(topic, msg);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    我们在swagger上随便测试一下,发送成功后,在console上可以看到对应的消息。

    在这里插入图片描述

  • 相关阅读:
    后门程序3(补充)
    Python问题:树的镜面映射
    hyperf 前置中间件 后置中间件
    Simulink| “双碳”背景下汽车减少碳排放建模与仿真
    电子制造企业部署WMS仓储管理系统的好处是什么
    idea右边找不到maven窗口(Idea_最右侧常用栏中没有Maven选项)
    如何清理废弃pv和其对应的文件夹
    汉诺塔的2个非递归解法
    Docker 入门篇(二)-- Linux 环境离线安装
    为什么面对读博大家都那么悲观?
  • 原文地址:https://blog.csdn.net/qq_41885819/article/details/125625048