Docker 部署 RocketMQ 5.3.2

69 0 0 0

拉取镜像

1
docker pull apache/rocketmq:5.3.2

创建容器共享网络

RocketMQ 中有多个服务,需要创建多个容器,创建 docker 网络便于容器间相互通信。

1
docker network create rocketmq

启动NameServer

1
2
3
4
5
# 启动 NameServer docker run -d --name rmqnamesrv -p 9876:9876 --network rocketmq apache/rocketmq:5.3.2 sh mqnamesrv # 验证 NameServer 是否启动成功 docker logs -f rmqnamesrv

看到 ‘The Name Server boot success…’, 表示NameServer 已成功启动。

启动 Broker+Proxy

配置 Broker 的IP地址

1
echo "brokerIP1=127.0.0.1" > broker.conf

把127.0.0.1改成外网ip

修改端口

创建rmq-proxy.json文件

1
2
3
4
5
6
{ "rocketMQClusterName": "DefaultCluster", "remotingAccessAddr": "v-kun.com", "remotingListenPort": 17080, "grpcServerPort": 17081 }

remotingListenPort默认8080端口是remoting监听的端口
grpcServerPort默认8081是grpc接口, 根据文档, rocketmq推荐使用grpc接口, 后续也会主要基于grpc进行开发

启动

1
2
3
4
5
6
7
8
9
10
11
docker run -d \ --name rmqbroker \ --network rocketmq \ -p 10912:10912 -p 10911:10911 -p 10909:10909 \ -p 17080:17080 -p 17081:17081 \ -e "NAMESRV_ADDR=rmqnamesrv:9876" \ -v ./broker.conf:/home/rocketmq/rocketmq-5.3.2/conf/broker.conf \ -v ./rmq-proxy.json:/home/rocketmq/rocketmq-5.3.2/conf/rmq-proxy.json \ apache/rocketmq:5.3.2 sh mqbroker \ --enable-proxy \ -c /home/rocketmq/rocketmq-5.3.2/conf/broker.conf

修改内存

  1. 复制出启动文件
1
docker cp rmqbroker:/home/rocketmq/rocketmq-5.3.2/bin/runbroker.sh ./
  1. 修改默认内存配置
1
DEFAULT_HEAP_OPTS="-Xms256m -Xmx256m -Xmn128m -XX:MaxDirectMemorySize=1g"
  1. 再将文件cp回去
1
docker cp ./runbroker.sh rmqbroker:/home/rocketmq/rocketmq-5.3.2/bin/
  1. 重启
1
2
docker stop rmqbroker docker start rmqbroker

客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ClientServiceProvider provider = ClientServiceProvider.loadService(); ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder() .setEndpoints("v-kun.com:17081") .build(); FilterExpression filterExpression = new FilterExpression("*", FilterExpressionType.TAG); try { PushConsumer pushConsumer = provider.newPushConsumerBuilder() .setClientConfiguration(clientConfiguration) // 设置消费者分组。 .setConsumerGroup(group) // 设置预绑定的订阅关系。 .setSubscriptionExpressions(Collections.singletonMap(topic, filterExpression)) // 设置消费监听器。 .setMessageListener(this::exec) .build(); System.out.println("消费者已启动:" + topic+"\t"+group); } catch (ClientException e) { throw new RuntimeException(e); }
目录