rocketmq4.9.4

给对应的路径赋权 chmod -R 777 文件名 不然启动可能报错后者看不到容器日志

systemctl status firewalld 查看防火墙状态

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

rocketmq单机 docker rocketmq dockerfile_rocketmq单机 docker

docker run最后的sh什么意思

必须要有,不然会报错

rocketmq单机 docker rocketmq dockerfile_linux_02

这个问题就是挂载路径错了,可能拷贝多了一些字母

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