RocketMQ
:dolls: RocketMQ
前言
RocketMQ 是一个消息队列系统,它的工作方式与 HTTP 不同。
在 HTTP 中,客户端(如浏览器)会直接向服务器发送请求,并等待服务器的响应。
在 RocketMQ 中,生产者(Producer)会将消息发送到 RocketMQ 的服务器,然后消费者(Consumer)可以从服务器接收这些消息。
RocketMQ 主要是作为一个消息传递的中转站

消息会被分为若干个
topic一个
topic会被分为多个分区queuequeue只会存简单的数据,完整的消息在commitLog文件中- 不同的queue会被布局在broker中,(可提高了并发性能)

下载
创建用户定义的网络:
docker network create rocketmq-network:one: RockerMQ—namesrv
拉取镜像
docker pull apache/rocketmq:latest构建容器
docker run -d ` --restart=always ` --name rocketMQ-namesrv ` --network rocketmq-network ` -p 9876:9876 ` -v C:\DockerData\rocketmq\data\namesrv\logs:/root/logs ` -v C:\DockerData\rocketmq\data\namesrv\store:/root/store ` -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" ` -e "JAVA_OPTS=-Duser.home/opt" ` apache/rocketmq ` sh mqnamesrv参数解释
-d:以分离模式运行容器,即在后台运行。--restart=always:设置容器在失败后自动重启。--name rmqnamesrv:为容器指定一个名称rmqnamesrv。-p 9876:9876:将主机的 9876 端口映射到容器的 9876 端口。-v C:\DockerData\rocketmq\data\namesrv\logs:/root/logs:将主机目录C:\docker\rocketmq\data\namesrv\logs挂载到容器的/root/logs目录。-v C:\DockerData\rocketmq\data\namesrv\store:/root/store:将主机目录C:\docker\rocketmq\data\namesrv\store挂载到容器的/root/store目录。-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m":设置容器内的环境变量JAVA_OPT_EXT,用于指定 Java 虚拟机的启动参数。-e "JAVA_OPTS=-Duser.home/opt":设置容器内的环境变量JAVA_OPTS,用于指定 Java 运行时的系统属性。JAVA_OPT_EXT:-server:指示 JVM 使用服务器模式(通常会启用一些优化,以提高性能)。-Xms128m:设置初始堆内存大小为 128 MB。-Xmx128m:设置最大堆内存大小为 128 MB。-Xmn128m:设置年轻代堆内存大小为 128 MB。
JAVA_OPTS:-Duser.home/opt:设置 Java 系统属性user.home,这个属性用于指定用户目录。
apache/rocketmq:指定要使用的 Docker 镜像及其标签。sh mqnamesrv:指定容器启动时要执行的命令。
:two: RocketMQ-dashboard
1. 拉取 RocketMQ Console 的 Docker 镜像
首先,你需要从 Docker Hub 拉取 RocketMQ Console 的官方镜像:
docker pull apacherocketmq/rocketmq-dashboard:latest2. 运行 Docker 容器
使用以下命令运行 RocketMQ Console 容器,并配置 NameServer 地址等参数:
docker run -d `
--restart=always `
--name rocketMQ-dashboard `
--network rocketmq-network `
-p 8080:8080 `
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=rocketMQ-namesrv:9876" `
apacherocketmq/rocketmq-dashboard:latest参数说明:
-p 9875:9875: 将容器的 9875端口映射到主机的 9875端口。你可以在浏览器中访问http://localhost:9875查看 RocketMQ Console。-e "JAVA_OPTS=-Drocketmq.config.namesrvAddr=localhost:9876": 设置环境变量JAVA_OPTS,指定 NameServer 的地址。你需要将localhost:9876替换为你的 RocketMQ NameServer 的实际地址。--name rocketmq-console: 给容器命名为rocketmq-console。
3. 访问 RocketMQ Console
在浏览器中输入 http://localhost:8080 (或你的主机 IP 地址) 来访问 RocketMQ Console 界面。
:three:RockerMQ—broker 安装
docker run -d `
--restart=always `
--name rocketMQ-broker `
--network rocketmq-network `
-p 10911:10911 `
-p 10909:10909 `
-v C:\DockerData\rocketmq\broker\logs:/home/rocketmq/logs `
-v C:\DockerData\rocketmq\broker\store:/home/rocketmq/store `
-v C:\DockerData\rocketmq\broker\conf\broker.conf:/home/rocketmq/rocketmq-5.2.0/conf/broker.conf `
-e "NAMESRV_ADDR=rockerMQ-namesrv:9876" `
-e "MAX_POSSIBLE_HEAP=200000000" `
apache/rocketmq `
sh mqbroker -c /home/rocketmq/rocketmq-5.2.0/conf/broker.confbroker.conf文件在容器内部- /home/rocketmq/rocketmq-5.2.0/conf
修改配置文件 broker.conf,配置文件加上自动创建主题(broker默认为false)
# 启用自动创建主题 autoCreateTopicEnable=true我的程序是通过namesrv来获取broker的ip的,但是ip是docker内部的ip地址,这样就会导致我在主机运行的程序拿到的broker的ip访问不到.
解决方法
brokerIP1=192.168.3.140 // lan网络的ipv4