Windows10 使用docker部署RocketMQ,以及内存问题

  1. 创建一个新的网络连接

    docker network create rocketmq-net
    
  2. 拉取镜像

    docker pull apache/rocketmq:5.1.4
    
  3. 创建rocketmq-namesrv容器

    docker run -d --name rocketmq-namesrv --network rocketmq-net -e "JAVA_OPTS=-Drocketmq.namesrv.bindIP=0.0.0.0" -p 9876:9876 apache/rocketmq:5.1.4 sh mqnamesrv
    
  4. 启动状态:docker logs -f rocketmq-namesrv,出现以下就是成功的
    . 在这里插入图片描述

  5. 添加需要映射的文件broker.conf,修改brokerIP1为你电脑IP

    # 所属集群名字
    brokerClusterName=DefaultCluster
    
    # broker 名字,注意此处不同的配置文件填写的不一样,如果在 broker-a.properties 使用: broker-a,
    # 在 broker-b.properties 使用: broker-b
    brokerName=broker-a
    
    # 0 表示 Master,> 0 表示 Slave
    brokerId=0
    
    # nameServer地址,分号分割
    # namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
    
    # 启动IP,如果 docker 报 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <192.168.0.120:10909> failed
    # 解决方式1 加上一句 producer.setVipChannelEnabled(false);,解决方式2 brokerIP1 设置宿主机IP,不要使用docker 内部IP
    brokerIP1=192.168.100.105
    
    # 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
    defaultTopicQueueNums=4
    
    # 是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 !!!这里仔细看是 false,false,false
    autoCreateTopicEnable=true
    
    # 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    autoCreateSubscriptionGroup=true
    
    # Broker 对外服务的监听端口
    listenPort=10911
    
    # 删除文件时间点,默认凌晨4点
    deleteWhen=04
    
    # 文件保留时间,默认48小时
    fileReservedTime=120
    
    # commitLog 每个文件的大小默认1G
    mapedFileSizeCommitLog=1073741824
    
    # ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整
    mapedFileSizeConsumeQueue=300000
    
    # destroyMapedFileIntervalForcibly=120000
    # redeleteHangedFileInterval=120000
    # 检测物理文件磁盘空间
    diskMaxUsedSpaceRatio=88
    # 存储路径
    # storePathRootDir=/home/ztztdata/rocketmq-all-4.1.0-incubating/store
    # commitLog 存储路径
    # storePathCommitLog=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/commitlog
    # 消费队列存储
    # storePathConsumeQueue=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/consumequeue
    # 消息索引存储路径
    # storePathIndex=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/index
    # checkpoint 文件存储路径
    # storeCheckpoint=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/checkpoint
    # abort 文件存储路径
    # abortFile=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/abort
    # 限制的消息大小
    maxMessageSize=65536
    
    # flushCommitLogLeastPages=4
    # flushConsumeQueueLeastPages=2
    # flushCommitLogThoroughInterval=10000
    # flushConsumeQueueThoroughInterval=60000
    
    # Broker 的角色
    # - ASYNC_MASTER 异步复制Master
    # - SYNC_MASTER 同步双写Master
    # - SLAVE
    brokerRole=ASYNC_MASTER
    
    # 刷盘方式
    # - ASYNC_FLUSH 异步刷盘
    # - SYNC_FLUSH 同步刷盘
    flushDiskType=ASYNC_FLUSH
    
    # 发消息线程池数量
    # sendMessageThreadPoolNums=128
    # 拉消息线程池数量
    # pullMessageThreadPoolNums=128
    
    
  6. 启动broker
    正常启动:

    docker run -d --name rocketmq-broker --network rocketmq-net -p 10911:10911 -p 10909:10909  -e "NAMESRV_ADDR=rmqnamesrv:9876" -v D:\\environment\docker\rocketMQ\broker.conf:/home/rocketmq/rocketmq-5.1.4/conf/broker.conf apache/rocketmq:5.1.4 sh mqbroker
    

    D:\\environment\docker\rocketMQ\broker.conf 是宿主机的路径,即Windows电脑里的路径
    /home/rocketmq/rocketmq-5.1.4/conf/broker.conf 这是docker里的路径

    • 若出现/bin/runbroker.sh: line 90: 25991 Killed $JAVA ${JAVA_OPT} $@,则是内存问题,需要修改内存
    docker run -d --name rocketmq-broker --network rocketmq-net -p 10911:10911 -p 10909:10909  -e "NAMESRV_ADDR=rmqnamesrv:9876" -e "JAVA_OPT_EXT=-Xms128m -Xmx128m -Xmn128m" -e "MAX_POSSIBLE_HEAP=200000000" -v D:\\environment\docker\rocketMQ\broker.conf:/home/rocketmq/rocketmq-5.1.4/conf/broker.conf apache/rocketmq:5.1.4 sh mqbroker
    
    • 修改后,如果发现docker使用出现500的问题,大概率是docker内存溢出
    1. 查看Windows查看docker信息,docker info,我这个已经是8G的,之前是2G,看自己电脑内存改。
      在这里插入图片描述

    2. 修改方式:windows路径栏输入:%UserProfile%,找到.wslconfig文件,没有的话自己加一下,修改内存大小
      在这里插入图片描述

      # 设置在wsl2上运行
      [wsl2]
      # 设置分配给WSL VM 的内存大小(默认是1/2的电脑内存)
      memory=8GB
      # 设置要分配给 WSL 2 VM 的逻辑处理器数(默认和Windows 上相同数量的逻辑处理器)
      processors=10 
      ```
      
      
      
      
      
### 三级标题:使用 Docker 部署 RocketMQ RocketMQ 支持通过 Docker Compose 快速部署单机版或集群版的消息服务,适用于开发、测试和生产环境。用户可以通过定义 `docker-compose.yml` 文件来启动 NameServer、Broker 和 Dashboard 等组件。 以下是一个典型的 `rocketmq-docker-compose.yml` 配置文件内容示例: ```yaml version: '3.5' services: namesrv: image: apache/rocketmq:4.9.4 container_name: rmqnamesrv ports: - "9876:9876" command: ["sh", "-c", "mkdir -p /home/rocketmq/store && mqnamesrv"] broker: image: apache/rocketmq:4.9.4 container_name: rmqbroker ports: - "10911:10911" - "10909:10909" environment: - NAMESRV_ADDR=rmqnamesrv:9876 command: ["sh", "-c", "mkdir -p /home/rocketmq/store && mqbroker -n rmqnamesrv:9876 -c /home/rocketmq/broker.conf"] volumes: - ./broker.conf:/home/rocketmq/broker.conf depends_on: - namesrv ``` 在配置完成后,切换到包含该 YAML 文件的目录并执行以下命令以启动服务: ```bash docker compose -f rocketmq-docker-compose.yml up -d ``` 上述命令将以后台模式启动容器化服务[^1]。 为了便于管理和监控 RocketMQ 实例,可以额外部署 RocketMQ Dashboard,它提供了一个图形界面用于查看主题、消费者组以及发送和消费消息的状态。Dashboard 的部署方式同样可以通过 Docker 完成,并且需要指定 NameServer 地址以便连接至 RocketMQ 集群。 例如,在 Spring Boot 应用程序中集成 RocketMQ 客户端时,可在 `application.yml` 中配置如下属性: ```yaml rocketmq: name-server: 192.168.141.130:9876 producer: group: chatGroup send-message-timeout: 3000 ``` 同时需引入相应的 Maven 依赖以支持与 RocketMQ 的交互[^2]。 对于更复杂的部署需求,如高可用性或多节点集群设置,则应在 Docker Compose 文件中添加更多 Broker 节点,并合理规划网络和服务发现机制,确保各个组件能够正确通信并形成稳定的集群结构。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值