GVKun编程网logo

docker部署rocketmq深度历险!各种bug带你解决(docker rocketmq)

18

本文将带您了解关于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)

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

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

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部署的实现示例

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 部署

Docker 版 rocketmq 部署

rocketmq 部署启动指南 - Docker 版

 

最近学习使用 rocketmq,需要搭建 rocketmq 服务端,本文主要记录 rocketmq 搭建过程以及这个过程踩到的一些坑。

准备工作#

在搭建之前,我们需要做一些准备工作,这里我们需要使用 docker 搭建服务,所以需要提前安装 docker。此外,由于 rocketmq 需要部署 broker 与 nameserver ,考虑到分开部署比较麻烦,这里将会使用 docker-compose。

rocketmq 架构图如下:

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 ,配置如下:

Copy
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 文件,配置如下:

Copy
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 服务启动成功。

mq 控制台

初体验 rocketmq#

这里将会使用 springboot 快速上手使用 mq,将会使用 rocketmq-spring-boot-starter 模块,pom 配置如下:

Copy
<!--在pom.xml中添加依赖-->
<dependency>
    <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> <version>2.0.3</version> </dependency>

消费服务发送方配置如下:

Copy
## application.properties
rocketmq.name-server=ip:9876
rocketmq.producer.group=my-group

消费服务发送方程序如下:

Copy
@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()); } }

消息消费方配置如下:

Copy
## application.properties
rocketmq.name-server=ip:9876

消息消费方运行程序如下:

Copy
@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); } } }

相关问题#

  1. 消息发送方消息发送异常,异常如图所示:Caused by: org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout

该异常是由于 brokerip 未设置正确导致,登录 mq 服务控制台,可以查看 broker 配置信息。

image.png

上面 192.168.128.3:10911 是 docker 容器 IP,这是一个主机内部 IP。这里需要将 IP 设置为云主机的 IP,需要在 broker.conf 修改 brokerIP1 参数。

  1. mq 控制台无法正常查看 mq 服务信息。

这个问题主要是 nameserver ip 设置错误导致。查看 mq 控制台运维页面,可以看到此时连接的 nameserver 地址信息。

image.png

可以看到这里设置的地址为:127.0.0.1:9876。由于这里 mq 控制台使用 docker 容器,容器内直接访问 127.0.0.1:9876 将会访问自己内部,而非宿主机内正确程序。

这里需要在 docker 配置环境变量,配置如下:

Copy
- 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 部署的相关信息,请在本站寻找。

本文标签: