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

本文介绍了如何通过Docker部署ApacheRocketMQ的单机版,包括拉取镜像、配置broker和nameserver、安装可视化工具、发送和接收消息的步骤,适合初学者了解RocketMQ的部署实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

您好,我是码农飞哥(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

如果访问不了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

image-20230917163925210

docker images

image-20230917164019313

3. 下载可视化工具镜像

docker pull apacherocketmq/rocketmq-dashboard:latest

image-20230917164438632

4. broker配置

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

mkdir -p  /Users/manongfeige/config/rocketmq
cd /Users/manongfeige/config/rocketmq/
touch broker.conf
vim broker.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地址、物理ip,不能用127.0.0.1、localhost、docker内网ip
brokerIP1 = 192.168.41.121

这里需要注意的是设置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. 第一部分是: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

image-20230917171851665

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

image-20230917172005407

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

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

     <dependency>
                <groupId>org.apache.rocketmq</groupId>
                <artifactId>rocketmq-spring-boot-starter</artifactId>
                <version>2.2.3</version>
            </dependency>
    
  2. 在application.properties文件中配置RocketMQ的相关信息:

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

    @Component
    public class Producer {
        @Autowired
        private RocketMQTemplate rocketMQTemplate;
    
        public void sendMessage(String topic, String message) {
            rocketMQTemplate.convertAndSend(topic, message);
        }
    }
    
  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);
        }
    }
    
  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", "你好呀,码农飞哥");
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农飞哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值