rocketmq4.9.4
给对应的路径赋权 chmod -R 777 文件名 不然启动可能报错后者看不到容器日志
systemctl status firewalld 查看防火墙状态
https://www.jianshu.com/p/0c1c3c679ef8
Docker部署RocketMQ(4.9.4)官方镜像和控制台windows、mac、linux全平台通用
https://blog.51cto.com/u_15526925/5909533
docker pull apacherocketmq/rocketmq-dashboard:latest --就是控制台
docker pull apache/rocketmq:4.9.4 --包括rocketmq和broker 所以一共两个镜像
在你想要的地方创建文件夹,在该文件夹下打开Terminal,以下命令会构造该相对路径。
mkdir -p /docker/rocketmq 好像可以不用
这个应该就满足了
cd /docker/rocketmq/broker/conf
在上述创建的文件夹下创建broker.conf,内容如下,修改brokerIP1即可。
# mq集群名称
brokerClusterName = DefaultCluster
#broker名称,master和slave使用相同的名称,表明他们的主从关系
brokerName = broker-master
#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)
#liux、mac系统使用ifconfig,win系统用ipconfig查主机ip
brokerIP1 = 192.168.200.131
namesrvAddr=192.168.200.131:9876
# mq集群名称
brokerClusterName = DefaultCluster
#broker名称,master和slave使用相同的名称,表明他们的主从关系
brokerName = broker-master
#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)
#liux、mac系统使用ifconfig,win系统用ipconfig查主机ip
#brokerIP1 = 192.168.200.131
brokerIP1 = 192.168.200.131
#nameServer地址,分号分割
namesrvAddr = 192.168.200.131:9876
##Broker 对外服务的监听端口,
listenPort = 10911
##是否允许Broker自动创建Topic
autoCreateTopicEnable = true
##是否允许 Broker 自动创建订阅组
autoCreateSubscriptionGroup = true
##linux开启epoll
useEpollNativeSelector = true
手动起
开通端口
--防火墙是dead的话就不需要了 systemctl status firewalld 查看防火墙状态
firewall-cmd --zone=public --add-port=9876/tcp --permanent
firewall-cmd --zone=public --add-port=10911/tcp --permanent
firewall-cmd --zone=public --add-port=19876/tcp --permanent
firewall-cmd --zone=public --add-port=8765/tcp --permanent
firewall-cmd --zone=public --add-port=10912/tcp --permanent
firewall-cmd --zone=public --add-port=10909/tcp --permanent
firewall-cmd --reload
#curl -L "https://get.daocloud.io/docker/compose/releases/download/1.27.3/docker-#compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
## 加上许可权限
#chmod +x /usr/local/bin/docker-compose
-------------------------
-- 给所有文件夹赋予权限,否则可能启动失败
docker run -d --restart=always -v /docker/rocketmq/namesrv/logs:/home/rocketmq/logs \
--name mqnamesrv \
-e"JAVA_OPT_EXT=-server -Xms512m -Xmx512m -Xmn512m" \
-p 9876:9876 \
apache/rocketmq:4.9.4 \
sh mqnamesrv
docker run -d --restart=always -v /docker/rocketmq/broker/logs:/home/rocketmq/logs -v /docker/rocketmq/broker/store:/home/rocketmq/store \
-v /docker/rocketmq/broker/conf:/home/rocketmq/conf \
--name rmqbroker \
--link mqnamesrv:namesrv \
-e"JAVA_OPT_EXT=-server -Xms512m -Xmx512m -Xmn512m" \
-e "NAMESRV_ADDR=namesrv:9876" \
-p 10911:10911 -p 10912:10912 -p 10909:10909 \
apache/rocketmq:4.9.4 \
sh mqbroker -c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf
#-n应该是不用的
docker run -d --restart=always -v /docker/rocketmq/broker/logs:/home/rocketmq/logs -v /docker/rocketmq/broker/store:/home/rocketmq/store \
-v /docker/rocketmq/broker/conf:/home/rocketmq/conf \
--name rmqbroker \
--link mqnamesrv:namesrv \
-e"JAVA_OPT_EXT=-server -Xms512m -Xmx512m -Xmn512m"doc \
-e "NAMESRV_ADDR=namesrv:9876" \
-p 10911:10911 -p 10912:10912 -p 10909:10909 \
apache/rocketmq:4.9.4 \
sh mqbroker -n 192.168.200.131:9876 -c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf
快速启动 RocketMQ-Dashboard 8765可以随便改
docker pull apacherocketmq/rocketmq-dashboard:latest
docker run -d --restart=always --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.200.131:9876" -p 8765:8080 -t apacherocketmq/rocketmq-dashboard:latest
-d表示容器后台运行,-v path1:path2,path1表示宿主机的路径,path2表示容器的路径,-e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m"表示设置容器内的环境变量。-p表示宿主机和容器的端口映射。前一个表示宿主机的端口,后一个表示容器的端口。
-c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf是容器内的文件。
/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
问题
/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
本地broker.conf 的公网ip没生效,只能是进入容器改内网的ip
docker run最后的sh什么意思
必须要有,不然会报错
这个问题就是挂载路径错了,可能拷贝多了一些字母
springboot整合mq
<!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-spring-boot-starter -->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
查看代码笔记49.下载依赖手动到maven官网下载依赖到本地仓库
application.yml
rocketmq:
name-server: 192.168.75.128:9876
producer:
#配置生产组,名字随意,保证发送消息高可用性 生产组有多个生产者,就算dan了一个,还有另一个,高可用
group: tanhua_producer
#发送消息超时时间, 默认是3秒钟,建议同学配置超时时间为5秒
send-message-timeout: 5000
@RunWith(SpringRunner.class)
@SpringBootTest
public class AppTest {
//Rocketmq的核心类
@Autowired
private RocketMQTemplate mqTemplate ;
//发送一个普通的消息,入门案例
@Test
public void test01(){
//参数一: 消息主题 参数二: 消息内容
mqTemplate.convertAndSend("topic","hello 大家好!");
}
/*rocketMQTemplate.asyncSend("delay_register_topic", "helloWorld!", new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
System.out.println("\"返回成功map\" = " + "返回成功");
}
@Override
public void onException(Throwable throwable) {
System.out.println("\"返回失败map\" = " + JSON.toJSONString(throwable));
}
});*/
}
消费者
application