首先要开一台虚拟机,我的虚拟机IP是192.168.141.130
虚拟机上有docker环境
# 创建好目录
mkdir /opt/rocketmq
cd /opt/rocketmq
# 建broker配置文件
vim broker.conf
broker.conf内容如下
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1=192.168.141.130
namesrvAddr=192.168.141.130:9876
配置brokerIP1为了本地Java应用可以通过此IP访问到,不配置的话默认是172.xxx.xxx.xxx,在java应用中会出现sendDefaultImpl call timeout
连接超时的异常
接下来编写docker-compose.yml
# 新建
vim docker-compose.yml
# 直接粘贴内容
version: '3.8'
services:
namesrv:
image: apache/rocketmq:5.3.0
container_name: rmqnamesrv
ports:
- 9876:9876
networks:
- rocketmq
command: sh mqnamesrv
broker:
image: apache/rocketmq:5.3.0
container_name: rmqbroker
ports:
- 10909:10909
- 10911:10911
- 10912:10912
environment:
- NAMESRV_ADDR=rmqnamesrv:9876
depends_on:
- namesrv
networks:
- rocketmq
command: sh mqbroker -c /home/rocketmq/rocketmq-5.3.0/conf/broker.conf #用写的配置文件运行
volumes:
- ./broker.conf:/home/rocketmq/rocketmq-5.3.0/conf/broker.conf
proxy:
image: apache/rocketmq:5.3.0
container_name: rmqproxy
networks:
- rocketmq
depends_on:
- broker
- namesrv
ports:
- 8080:8080
- 8081:8081
restart: on-failure
environment:
- NAMESRV_ADDR=rmqnamesrv:9876
command: sh mqproxy
dashboard:
image: apacherocketmq/rocketmq-dashboard
container_name: rmqdashboard
networks:
- rocketmq
depends_on:
- broker
- namesrv
- proxy
ports:
- 9999:8080 # 通过192.168.141.130:9999访问,可自行更改
environment:
- JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.141.130:9876
networks:
rocketmq:
driver: bridge
# 最后运行
docker compose up -d
# 放几个其他命令
docker compose stop # 停止
docker compose start # 运行
docker compose down # 移除
访问http://192.168.141.130:9999
引入pom测试
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.3.1</version>
</dependency>
rocketmq:
name-server: 192.168.141.130:9876
# 默认的消息组
producer:
group: chatGroup
send-message-timeout: 3000
如果引入2.2.2版本会出现bean无法被注入的情况,不知道什么原因,用2.3.1(目前最新版本)就没有问题
@Autowired
private RocketMQTemplate rocketMQTemplate;
@Override
public void run(String... args) throws Exception {
System.out.println("开始发送");
rocketMQTemplate.send("test-topic", MessageBuilder.withPayload("123").build());
System.out.println("结束");
}
发送成功啦