• 【RocketMQ系列二】通过docker部署单机RocketMQ


    您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦
    💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通
    😁 2. 毕业设计专栏,毕业季咱们不慌忙,几百款毕业设计等你选。
    ❤️ 3. Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当 。python爬虫入门进阶
    ❤️ 4. Ceph实战,从原理到实战应有尽有。 Ceph实战
    ❤️ 5. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门

    1. 前言

    前文对RocketMQ的基本概念做了一些介绍,本文将小试牛刀一下。本文主要讲述如何通过docker来部署单机版的RocketMQ。部署RocketMQ的最核心是部署nameserver以及部署broker。然后,我们还需要安装可视化界面,在RocketMQ的官网上提供的是基础的安装方式。

    2. 拉取镜像

    git clone https://github.com/apache/rocketmq-docker.git
    
    • 1

    如果访问不了github的话则需要科学上网。该命令会拉取最新的rocketmq镜像。

    image-20230917161227441

    下载好之后,可以通过访问 https://archive.apache.org/dist/rocketmq/ 命令来查看rocketmq镜像的版本。

    下载好之后 执行cd rocketmq-docker 命令跳转到 ./rockeetmq-docker 命令。

    image-20230917161955871

    然后,跳转到 image-build 目录,然后,执行 build-image.sh 命令构建镜像。

    cd image-build
    sh build-image.sh 5.1.3 alpine
    
    • 1
    • 2

    image-20230917163925210

    docker images
    
    • 1

    image-20230917164019313

    3. 下载可视化工具镜像

    docker pull apacherocketmq/rocketmq-dashboard:latest
    
    • 1

    image-20230917164438632

    4. broker配置

    这里自定义一个路径用于存放broker的配置,然后在此路径下创建一个broker.conf的文件。

    mkdir -p  /Users/manongfeige/config/rocketmq
    cd /Users/manongfeige/config/rocketmq/
    touch broker.conf
    vim broker.conf
    
    • 1
    • 2
    • 3
    • 4

    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地址、物理ip,不能用127.0.0.1、localhost、docker内网ip
    brokerIP1 = 192.168.41.121
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    这里需要注意的是设置broker节点所在的服务器ip地址,必须是真实的物理ip,不能用127.0.0.1、localhost、docker内网ip。

    在mac电脑中通过 ifconfig 命令来查看。

    image-20230917165315858

    配置好broker.conf,接着配置启动 RocketMQ的yml文件。这里创建一个 rocketmq.yml 文件,跟broker.conf文件放在同一个目录下。

    5.启动文件 rocketmq.yml 配置

    version: '3'
    services:
      namesrv:
        image: apache/rocketmq:5.1.3-alpine
        container_name: rmqnamesrv
        ports: 
          - 9876:9876
        command: sh mqnamesrv
      
      broker:
        image: apache/rocketmq:5.1.3-alpine
        container_name: rmqbroker
        ports:
          - 10909:10909
          - 10911:10911
          - 10912:10912
        volumes:
           - /Users/manongfeige/config/rocketmq/broker.conf:/home/rocketmq/rocketmq-5.1.3/conf/broker.conf
        command: sh mqbroker -n namesrv:9876 -c /home/rocketmq/rocketmq-5.1.3/conf/broker.conf
        depends_on:
          - namesrv
      mqconsole:
        image: apacherocketmq/rocketmq-dashboard
        container_name: rmqdashboard
        ports: 
          - 8181:8080
        environment:
          JAVA_OPTS: -Drocketmq.config.namesrvAddr=namesrv:9876 -Drocketmq.config.isVIPChannel=false
        depends_on:
          - namesrv
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    此配置文件主要分为三部分:

    1. 第一部分是:nameserver的配置。nameserver默认的端口是 9876。镜像的话这里指定为:apache/rocketmq:5.1.3-alpine。如果版本不同需要做对应的修改。如果不知道你的镜像是啥可以在docker中查看。

      image-20230917170309746

    2. 配置broker

      broker 需要注意的是将前面配置的 broker.conf 文件映射到容器中的 /home/rocketmq/rocketmq-5.1.3/conf/broker.conf 中去。

    3. 配置myconsole

      主要是设置使用的镜像,容器的名称以及使用的端口号。console 依赖的是Java环境以及nameserver。

    配置好之后,接着执行如下命令:

    docker-compose -f rocketmq.yml up -d
    
    • 1

    image-20230917171851665

    启动正常的命令应该是这样的,然后。我们访问一下 http://localhost:8181/#/producer 控制台。

    image-20230917172005407

    6. 测试消息的发送和接收

    1. 首先,在pom.xml文件中添加RocketMQ的依赖:

       <dependency>
                  <groupId>org.apache.rocketmqgroupId>
                  <artifactId>rocketmq-spring-boot-starterartifactId>
                  <version>2.2.3version>
              dependency>
      
      • 1
      • 2
      • 3
      • 4
      • 5
    2. 在application.properties文件中配置RocketMQ的相关信息:

      rocketmq.name-server=192.168.31.191:9876
      rocketmq.producer.group=myProducerGroup
      
      • 1
      • 2
    3. 创建一个生产者类:

      @Component
      public class Producer {
          @Autowired
          private RocketMQTemplate rocketMQTemplate;
      
          public void sendMessage(String topic, String message) {
              rocketMQTemplate.convertAndSend(topic, message);
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    4. 创建一个消费者类:

      @Service
      @RocketMQMessageListener(topic = "test_topic", consumerGroup = "test_consumer_group")
      public class Consumer implements RocketMQListener<String> {
          @Override
          public void onMessage(String s) {
              System.out.println("Received message:" + s);
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    5. 在主类中调用生产者发送消息:

      @SpringBootApplication
      public class RocketmqDemoApplication {
      
          public static void main(String[] args) {
      
              ConfigurableApplicationContext run = SpringApplication.run(RocketmqDemoApplication.class, args);
              Producer producer = run.getBean(Producer.class);
              producer.sendMessage("test_topic", "你好呀,码农飞哥");
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
  • 相关阅读:
    力扣刷题学习SQL篇——1-5 修改(变更性别——使用判断if/case when)
    Redis 7 第七讲 哨兵模式(sentinal)架构篇
    Python封装机制及实现方法
    java毕业设计超市网站mybatis+源码+调试部署+系统+数据库+lw
    jmeter集群搭建
    Android13 动态切换默认laucnher
    不再重蹈 Apache Log4j的覆辙,谷歌提出三项安全倡议
    杭电oj--C语言合法标识符判定
    Python的基础:模块(Modules)和包(Packages)详解
    互联网公司研发效能/工程效率团队建设和规划
  • 原文地址:https://blog.csdn.net/u014534808/article/details/133828330