本文将带您了解关于docker部署rocketmq深度历险!各种bug带你解决的新内容,同时我们还将为您解释dockerrocketmq的相关知识,另外,我们还将为您提供关于Centos7.x+Doc
本文将带您了解关于docker部署rocketmq深度历险!各种bug带你解决的新内容,同时我们还将为您解释docker rocketmq的相关知识,另外,我们还将为您提供关于Centos7.x+Docker部署RabbitMQ、Docker Compose 一键快速部署 RocketMQ、Docker rocketmq部署的实现示例、Docker 版 rocketmq 部署的实用信息。
本文目录一览:- docker部署rocketmq深度历险!各种bug带你解决(docker rocketmq)
- Centos7.x+Docker部署RabbitMQ
- Docker Compose 一键快速部署 RocketMQ
- Docker rocketmq部署的实现示例
- Docker 版 rocketmq 部署
docker部署rocketmq深度历险!各种bug带你解决(docker rocketmq)
首先上一篇博客,主要是按照他的来的。但是绝对比他遇到的bug多多了!!
https://www.jianshu.com/p/412a83c605f2
qq:153574139(可以给配置这个烦恼的朋友一点帮助)嘿嘿
第一步就是配置broker和namesrv,其实配置这个不难,就是要搞清楚docker的与虚拟机访问方式
如果你配置的地址是docker的ip,那么外网是无法访问的,所以要根据下边的作者说的,在
broker的conf里面配置ip(也就是虚拟机ip),我的docker运行在虚拟机,运行broker的时候可能会出现一个错误,跟java的路经有关,按照网上那个把docker里面的tools的ext文件路径改一下,
然后运行consle,会出现一个异常,但不影响使用。
输入命令
docker exec -it 61df81345674 ./mqadmin clusterList -n 192.168.152.129:9876
ip是外网的地址,如果出现<192.168.888>连接失败,请关掉防火墙!!切记!!
出现
代表配置成功了,可以看到namesrc的broker了,下边是作者的步骤
1、拉取rocketmq 镜像
docker pull rocketmqinc/rocketmq
2、拉取rocketmq-console 镜像
docker pull styletang/rocketmq-console-ng
3、启动nameserver命令
docker run -d -p 9876:9876 -v `pwd`/data/namesrv/logs:/root/logs -v `pwd`/data/namesrv/store:/root/store --name rmqnamesrv rocketmqinc/rocketmq sh mqnamesrv
4、启动broker命令
这里会出现个bug,下面会说解决办法。
docker run -d -p 10911:10911 -p 10909:10909 -v `pwd`/data/broker/logs:/root/logs -v `pwd`/data/broker/store:/root/store --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" rocketmqinc/rocketmq sh mqbroker -c ../conf/broker.conf
5、启动rocketmq-console 命令
docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=xxx.xxx.xxx.xxx:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8080:8080 -t styletang/rocketmq-console-ng
这里的地址,我指定为外网ip,如果指定127.0.0.1::9876会出现无法访问的bug
org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <null> failed
问题:
遇到最大的问题就是,启动broker时,RocketMQ会指定为内网地址,使用的是172.17.0.3。会导致外网生产者无法连接到broker。报错信息:
org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <172.17.0.3:10909> failed
解决办法:
conf/broker.conf文件增加配置项brokerIP1 = xxx.xxx.xxx.xxx
。这里的ip地址指定为外网地址。
并且docker启动时需要增加命令参数-c ../conf/broker.conf
。因为rockerMQ broker默认会选择内网地址。只有当参数行中有-c
参数时才会使用配置文件的参数。这里卡了很长时间。
if (commandLine.hasOption(''c'')) {
String file = commandLine.getOptionValue(''c'');
if (file != null) { configFile = file; InputStream in = new BufferedInputStream(new FileInputStream(file)); properties = new Properties(); properties.load(in); properties2SystemEnv(properties); MixAll.properties2Object(properties, brokerConfig); MixAll.properties2Object(properties, nettyServerConfig); MixAll.properties2Object(properties, nettyClientConfig); MixAll.properties2Object(properties, messageStoreConfig); BrokerPathConfigHelper.setBrokerConfigPath(file); in.close(); } }
如何修改broker.conf文件?
使用docker exec 命令进入容器内,修改broker.conf文件。修改完后,重启容器。
docker exec -it 116 bash
cd ../conf
vi broker.conf
以上是作者的步骤:
然后我们配置好这个,在我的本机非虚拟机写好生产者消费者的demo
发现没有消费,打开控制台里面的消息。输入topic搜索发现有消息啊
这样是改完的,以前的说consumer版本过低,消费不到消息可以来这里查
改完了consumer,大功告成!!!!!!!!!!!
Centos7.x+Docker部署RabbitMQ
一、说明
以前都是需要下载好多东西,东改改,西改改,现在有了Docker,简直太方便了。话不多说,直接搞起来。
二、环境说明
阿里云 Centos7.x (这个无所谓哈,什么系统都是可以的,只是命令稍微不同罢了。Docker在Linux,Windows都是支持的)。
三、安装Docker
请移步:https://blog.csdn.net/qq_17623363/article/details/99693639
四、安装RabbitMQ
1、获取镜像
这里你也可以指定你需要的版本,只需要把management修改为你想使用的版本号即可。或者去Docker hub上查一下
#指定版本,该版本包含了web控制页面
docker pull rabbitmq:management
2、启动
这里我使用的是方式一,因为默认就是有用户的,所以就不用多此一举了。
#方式一:默认guest 用户,密码也是 guest
docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management
#方式二:设置用户名和密码
docker run -d --hostname my-rabbit --name rabbit -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password -p 15672:15672 -p 5672:5672 rabbitmq:management
五、测试访问
浏览器输入:ip:15672,这里为什么是15672呢,一会再告诉大家
账号密码默认都是guest
六、RabbitMQ-Web管理界面-简单讲解
1、端口说明
2、创建新用户
3、给创建的用户绑定虚拟机
点进用户名
绑定
结果
如何创建一个新的虚拟机
这里就不创建了,可以自己摸索下
本文分享 CSDN - TrueDei。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
Docker Compose 一键快速部署 RocketMQ
Apache RocketMQ 是一个开源的分布式消息中间件系统,最初由阿里巴巴开发并贡献给 Apache 软件基金会。RocketMQ 提供了高性能、高可靠性、高扩展性和低延迟的消息传递服务,适用于构建大规模分布式系统中的消息通信和数据同步。
RocketMQ 支持多种消息模型,包括点对点(P2P)和发布 / 订阅(Pub/Sub)模型。它具有以下特性:
- 高性能:RocketMQ 能够处理大规模消息传递,并具有低延迟和高吞吐量的特点。
- 高可靠性:RocketMQ 提供了消息的持久化存储和消息重试机制,确保消息不丢失,同时支持容错和高可用性。
- 高扩展性:RocketMQ 支持横向扩展,能够轻松地扩展到多个 Broker 节点以处理大量消息。
- 丰富的特性:RocketMQ 提供了丰富的特性,包括延迟消息、顺序消息、事务消息、消息过滤等。
- 监控和管理:RocketMQ 提供了丰富的监控和管理工具,用于监控消息的生产和消费情况,以及管理消息队列的配置和状态。
按照下面步骤,通过 Docker Compose 一键快速部署 RocketMQ
1. 编写 docker-compose
复制下面的内容,创建 docker-compose.yml
文件
version: ''3.8''
services:
namesrv:
image: registry.cn-hangzhou.aliyuncs.com/jeecgdocker/rocketmq:4.9.6
container_name: rmqnamesrv
ports:
- 9876:9876
networks:
- rocketmq
command: sh mqnamesrv
broker:
image: registry.cn-hangzhou.aliyuncs.com/jeecgdocker/rocketmq:4.9.6
container_name: rmqbroker
ports:
- 10909:10909
- 10911:10911
- 10912:10912
environment:
- NAMESRV_ADDR=namesrv:9876
depends_on:
- namesrv
networks:
- rocketmq
command: sh mqbroker
dashboard:
image: registry.cn-hangzhou.aliyuncs.com/jeecgdocker/rocketmq-dashboard:latest
container_name: rmqdashboard
ports:
- 8080:8080
environment:
- JAVA_OPTS=-Drocketmq.namesrv.addr=namesrv:9876
depends_on:
- namesrv
networks:
- rocketmq
networks:
rocketmq:
driver: bridge
2. 启动 RocketMQ 集群
执行下面命令,根据 docker-compose.yml 创建 RockerMQ
集群
docker-compose up -d
3. 关闭 RocketMQ 集群
根据 docker-compose.yml 文件关闭所有服务。
docker-compose down
4. 访问 RocketMQ 管理界面
关于 RocketMQ 如何集成到项目中使用,可以参考开源项目 JeecgBoot 低代码平台
Docker rocketmq部署的实现示例
最近学习使用 rocketmq,需要搭建 rocketmq 服务端,本文主要记录 rocketmq 搭建过程以及这个过程踩到的一些坑。
准备工作
在搭建之前,我们需要做一些准备工作,这里我们需要使用 docker 搭建服务,所以需要提前安装 docker。此外,由于 rocketmq 需要部署 broker 与 nameserver ,考虑到分开部署比较麻烦,这里将会使用 docker-compose。
rocketmq 架构图如下:
另外,还需要搭建一个 web 可视化控制台,可以监控 mq 服务状态,以及消息消费情况,这里使用 rocketmq-console,同样该程序也将使用 docker 安装。
部署过程
首先我们需要 rocketmq docker 镜像,这里我们可以选择自己制作,直接拉取git@github.com:apache/rocketmq-docker.git,然后再制作镜像。 另外还可以直接使用 docker hub 上官方制作的镜像,镜像名:rocketmqinc/rocketmq
。
接着创建 mq 配置文件broker.conf
,文件放置到/opt/rocketmq/conf
,配置如下:
brokerClusterName = DefaultCluster brokerName = broker-a brokerId = 0 deleteWhen = 04 fileReservedTime = 48 brokerRole = ASYNC_MASTER flushDiskType = ASYNC_FLUSH # 如果是本地程序调用云主机 mq,这个需要设置成 云主机 IP brokerIP1=10.10.101.80
在创建如下文件夹:/opt/rocketmq/logs
,/opt/rocketmq/store
,最后创建 docker-compose.yml 文件,配置如下:
version: ''2'' services: namesrv: image: rocketmqinc/rocketmq container_name: rmqnamesrv ports: - 9876:9876 volumes: - /opt/rocketmq/logs:/home/rocketmq/logs - /opt/rocketmq/store:/home/rocketmq/store command: sh mqnamesrv broker: image: rocketmqinc/rocketmq container_name: rmqbroker ports: - 10909:10909 - 10911:10911 - 10912:10912 volumes: - /opt/rocketmq/logs:/home/rocketmq/logs - /opt/rocketmq/store:/home/rocketmq/store - /opt/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf #command: sh mqbroker -n namesrv:9876 command: sh mqbroker -n namesrv:9876 -c ../conf/broker.conf depends_on: - namesrv environment: - JAVA_HOME=/usr/lib/jvm/jre console: image: styletang/rocketmq-console-ng container_name: rocketmq-console-ng ports: - 8087:8080 depends_on: - namesrv environment: - JAVA_OPTS= -Dlogging.level.root=info -Drocketmq.namesrv.addr=rmqnamesrv:9876 - Dcom.rocketmq.sendMessageWithVIPChannel=false
注意点
这里需要注意 rocketmq broker 与 rokcetmq-console 都需要与 rokcetmq nameserver 连接,需要知道 nameserver ip。使用 docker-compose 之后,上面三个 docker 容器将会一起编排,可以直接使用容器名代替容器 ip,如这里 nameserver 容器名 rmqnamesrv。
配置完成之后,运行 docker-compose up 启动三个容器,启动成功后,访问 ip:8087,查看 mq 外部控制台,如果可以看到以下信息,rocketmq 服务启动成功。
初体验 rocketmq
这里将会使用 springboot 快速上手使用 mq,将会使用rocketmq-spring-boot-starter
模块,pom 配置如下:
<!--在pom.xml中添加依赖--> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> <version>2.0.3</version> </dependency>
消费服务发送方配置如下:
## application.properties rocketmq.name-server=ip:9876 rocketmq.producer.group=my-group
消费服务发送方程序如下:
@SpringBootApplication public class ProducerApplication implements CommandLineRunner { @Resource private RocketMQTemplate rocketMQTemplate; public static void main(String[] args){ SpringApplication.run(ProducerApplication.class, args); } public void run(String... args) throws Exception { rocketMQTemplate.convertAndSend("test-topic-1", "Hello, World!"); rocketMQTemplate.send("test-topic-1", MessageBuilder.withPayload("Hello, World! I''m from spring message").build()); } }
消息消费方配置如下:
## application.properties rocketmq.name-server=ip:9876
消息消费方运行程序如下:
@SpringBootApplication public class ConsumerApplication{ public static void main(String[] args){ SpringApplication.run(ConsumerApplication.class, args); } @Slf4j @Service @RocketMQMessageListener(topic = "test-topic-1", consumerGroup = "my-consumer_test-topic-1") public static class MyConsumer1 implements RocketMQListener<String> { public void onMessage(String message) { log.info("received message: {}", message); } } }
相关问题
消息发送方消息发送异常,异常如图所示:Caused by: org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout
。
该异常是由于 brokerip 未设置正确导致,登录 mq 服务控制台,可以查看 broker 配置信息。
上面192.168.128.3:10911
是 docker 容器 IP,这是一个主机内部 IP。这里需要将 IP 设置为云主机的 IP,需要在broker.conf
修改brokerIP1
参数。
mq 控制台无法正常查看 mq 服务信息。
这个问题主要是 nameserver ip 设置错误导致。查看 mq 控制台运维页面,可以看到此时连接的 nameserver 地址信息。
可以看到这里设置的地址为:127.0.0.1:9876
。由于这里 mq 控制台使用 docker 容器,容器内直接访问127.0.0.1:9876
将会访问自己内部,而非宿主机内正确程序。
这里需要在 docker 配置环境变量,配置如下:
- JAVA_OPTS= -Dlogging.level.root=info -Drocketmq.namesrv.addr=rmqnamesrv:9876
帮助文档
rocketmq-docker
RocketMq docker 搭建和基本概念
RocketMQ-Spring
出处:http://www.cnblogs.com/Leo_wl/
到此这篇关于Docker rocketmq部署的实现示例的文章就介绍到这了,更多相关Docker rocketmq部署内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
- 使用Docker容器部署rocketmq单机的全过程
- Docker 部署RocketMQ的详细操作
- docker安装rocketMQ和安装过程中出现问题的解决
- docker安装RocketMQ的实现步骤
- 超详细Docker Desktop下安装rocketmq的教程
- Docker阿里云RocketMQ 4.5.1部署流程详解
- docker安装rocketMQ教程(最详细)
- Docker中RocketMQ的安装与使用详解
- Docker安装部署单机版Rocket及基础讲解
Docker 版 rocketmq 部署
rocketmq 部署启动指南 - Docker 版
最近学习使用 rocketmq,需要搭建 rocketmq 服务端,本文主要记录 rocketmq 搭建过程以及这个过程踩到的一些坑。
准备工作#
在搭建之前,我们需要做一些准备工作,这里我们需要使用 docker 搭建服务,所以需要提前安装 docker。此外,由于 rocketmq 需要部署 broker 与 nameserver ,考虑到分开部署比较麻烦,这里将会使用 docker-compose。
rocketmq 架构图如下:
另外,还需要搭建一个 web 可视化控制台,可以监控 mq 服务状态,以及消息消费情况,这里使用 rocketmq-console,同样该程序也将使用 docker 安装。
部署过程#
首先我们需要 rocketmq docker 镜像,这里我们可以选择自己制作,直接拉取 git@github.com:apache/rocketmq-docker.git ,然后再制作镜像。 另外还可以直接使用 docker hub 上官方制作的镜像,镜像名: rocketmqinc/rocketmq
。
接着创建 mq 配置文件 broker.conf
,文件放置到 /opt/rocketmq/conf
,配置如下:
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04 fileReservedTime = 48 brokerRole = ASYNC_MASTER flushDiskType = ASYNC_FLUSH # 如果是本地程序调用云主机 mq,这个需要设置成 云主机 IP brokerIP1=10.10.101.80
在创建如下文件夹:/opt/rocketmq/logs
,/opt/rocketmq/store
,最后创建 docker-compose.yml 文件,配置如下:
version: ''2''
services:
namesrv:
image: rocketmqinc/rocketmq container_name: rmqnamesrv ports: - 9876:9876 volumes: - /opt/rocketmq/logs:/home/rocketmq/logs - /opt/rocketmq/store:/home/rocketmq/store command: sh mqnamesrv broker: image: rocketmqinc/rocketmq container_name: rmqbroker ports: - 10909:10909 - 10911:10911 - 10912:10912 volumes: - /opt/rocketmq/logs:/home/rocketmq/logs - /opt/rocketmq/store:/home/rocketmq/store - /opt/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf #command: sh mqbroker -n namesrv:9876 command: sh mqbroker -n namesrv:9876 -c ../conf/broker.conf depends_on: - namesrv environment: - JAVA_HOME=/usr/lib/jvm/jre console: image: styletang/rocketmq-console-ng container_name: rocketmq-console-ng ports: - 8087:8080 depends_on: - namesrv environment: - JAVA_OPTS= -Dlogging.level.root=info -Drocketmq.namesrv.addr=rmqnamesrv:9876 - Dcom.rocketmq.sendMessageWithVIPChannel=false
注意点
这里需要注意 rocketmq broker 与 rokcetmq-console 都需要与 rokcetmq nameserver 连接,需要知道 nameserver ip。使用 docker-compose 之后,上面三个 docker 容器将会一起编排,可以直接使用容器名代替容器 ip,如这里 nameserver 容器名 rmqnamesrv。
配置完成之后,运行 docker-compose up 启动三个容器,启动成功后,访问 ip:8087,查看 mq 外部控制台,如果可以看到以下信息,rocketmq 服务启动成功。
初体验 rocketmq#
这里将会使用 springboot 快速上手使用 mq,将会使用 rocketmq-spring-boot-starter
模块,pom 配置如下:
<!--在pom.xml中添加依赖-->
<dependency>
<groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> <version>2.0.3</version> </dependency>
消费服务发送方配置如下:
## application.properties
rocketmq.name-server=ip:9876
rocketmq.producer.group=my-group
消费服务发送方程序如下:
@SpringBootApplication
public class ProducerApplication implements CommandLineRunner { @Resource private RocketMQTemplate rocketMQTemplate; public static void main(String[] args){ SpringApplication.run(ProducerApplication.class, args); } public void run(String... args) throws Exception { rocketMQTemplate.convertAndSend("test-topic-1", "Hello, World!"); rocketMQTemplate.send("test-topic-1", MessageBuilder.withPayload("Hello, World! I''m from spring message").build()); } }
消息消费方配置如下:
## application.properties
rocketmq.name-server=ip:9876
消息消费方运行程序如下:
@SpringBootApplication
public class ConsumerApplication{ public static void main(String[] args){ SpringApplication.run(ConsumerApplication.class, args); } @Slf4j @Service @RocketMQMessageListener(topic = "test-topic-1", consumerGroup = "my-consumer_test-topic-1") public static class MyConsumer1 implements RocketMQListener<String> { public void onMessage(String message) { log.info("received message: {}", message); } } }
相关问题#
- 消息发送方消息发送异常,异常如图所示:
Caused by: org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout
。
该异常是由于 brokerip 未设置正确导致,登录 mq 服务控制台,可以查看 broker 配置信息。
上面 192.168.128.3:10911
是 docker 容器 IP,这是一个主机内部 IP。这里需要将 IP 设置为云主机的 IP,需要在 broker.conf
修改 brokerIP1
参数。
- mq 控制台无法正常查看 mq 服务信息。
这个问题主要是 nameserver ip 设置错误导致。查看 mq 控制台运维页面,可以看到此时连接的 nameserver 地址信息。
可以看到这里设置的地址为:127.0.0.1:9876
。由于这里 mq 控制台使用 docker 容器,容器内直接访问 127.0.0.1:9876
将会访问自己内部,而非宿主机内正确程序。
这里需要在 docker 配置环境变量,配置如下:
- JAVA_OPTS= -Dlogging.level.root=info -Drocketmq.namesrv.addr=rmqnamesrv:9876
帮助文档#
rocketmq-docker
RocketMq docker 搭建和基本概念
RocketMQ-Spring
关于docker部署rocketmq深度历险!各种bug带你解决和docker rocketmq的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Centos7.x+Docker部署RabbitMQ、Docker Compose 一键快速部署 RocketMQ、Docker rocketmq部署的实现示例、Docker 版 rocketmq 部署的相关信息,请在本站寻找。
本文标签: