设为首页收藏本站

安徽论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10810|回复: 0

Docker rocketmq部署的实现示例

[复制链接]

77

主题

502

回帖

1002

积分

金牌会员

Rank: 6Rank: 6

积分
1002
发表于 2022-3-26 11:01:53 | 显示全部楼层 |阅读模式
网站内容均来自网络,本站只提供信息平台,如有侵权请联系删除,谢谢!
目录

最近学习使用 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 上官方制作的镜像,镜像名:
  1. rocketmqinc/rocketmq
复制代码

接着创建 mq 配置文件
  1. broker.conf
复制代码
,文件放置到
  1. /opt/rocketmq/conf
复制代码
,配置如下:
  1. brokerClusterName = DefaultCluster  
  2. brokerName = broker-a  
  3. brokerId = 0  
  4. deleteWhen = 04  
  5. fileReservedTime = 48  
  6. brokerRole = ASYNC_MASTER  
  7. flushDiskType = ASYNC_FLUSH  
  8. # 如果是本地程序调用云主机 mq,这个需要设置成 云主机 IP
  9. brokerIP1=10.10.101.80
复制代码
在创建如下文件夹:
  1. /opt/rocketmq/logs
复制代码
  1. /opt/rocketmq/store
复制代码
,最后创建 docker-compose.yml 文件,配置如下:
  1. version: '2'
  2. services:
  3.   namesrv:
  4.     image: rocketmqinc/rocketmq
  5.     container_name: rmqnamesrv
  6.     ports:
  7.       - 9876:9876
  8.     volumes:
  9.       - /opt/rocketmq/logs:/home/rocketmq/logs
  10.       - /opt/rocketmq/store:/home/rocketmq/store
  11.     command: sh mqnamesrv
  12.   broker:
  13.     image: rocketmqinc/rocketmq
  14.     container_name: rmqbroker
  15.     ports:
  16.       - 10909:10909
  17.       - 10911:10911
  18.       - 10912:10912
  19.     volumes:
  20.       - /opt/rocketmq/logs:/home/rocketmq/logs
  21.       - /opt/rocketmq/store:/home/rocketmq/store
  22.       - /opt/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf
  23.     #command: sh mqbroker -n namesrv:9876
  24.     command: sh mqbroker -n namesrv:9876 -c ../conf/broker.conf
  25.     depends_on:
  26.       - namesrv
  27.     environment:
  28.       - JAVA_HOME=/usr/lib/jvm/jre
  29.   console:
  30.     image: styletang/rocketmq-console-ng
  31.     container_name: rocketmq-console-ng
  32.     ports:
  33.       - 8087:8080
  34.     depends_on:
  35.       - namesrv
  36.     environment:
  37.       - JAVA_OPTS= -Dlogging.level.root=info   -Drocketmq.namesrv.addr=rmqnamesrv:9876
  38.       - 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 服务启动成功。
[url=https://img.jbzj.com/file_images/article/202112/2021122810351440.png]


初体验 rocketmq

这里将会使用 springboot 快速上手使用 mq,将会使用
  1. rocketmq-spring-boot-starter
复制代码
模块,pom 配置如下:
  1. <!--在pom.xml中添加依赖-->
  2. <dependency>
  3.     <groupId>org.apache.rocketmq</groupId>
  4.     <artifactId>rocketmq-spring-boot-starter</artifactId>
  5.     <version>2.0.3</version>
  6. </dependency>
复制代码
消费服务发送方配置如下:
  1. ## application.properties
  2. rocketmq.name-server=ip:9876
  3. rocketmq.producer.group=my-group
复制代码
消费服务发送方程序如下:
  1. @SpringBootApplication
  2. public class ProducerApplication implements CommandLineRunner {
  3.     @Resource
  4.     private RocketMQTemplate rocketMQTemplate;

  5.     public static void main(String[] args){
  6.         SpringApplication.run(ProducerApplication.class, args);
  7.     }

  8.     public void run(String... args) throws Exception {
  9.         rocketMQTemplate.convertAndSend("test-topic-1", "Hello, World!");
  10.         rocketMQTemplate.send("test-topic-1", MessageBuilder.withPayload("Hello, World! I'm from spring message").build());
  11.     }

  12. }
复制代码
消息消费方配置如下:
  1. ## application.properties
  2. rocketmq.name-server=ip:9876
复制代码
消息消费方运行程序如下:
  1. @SpringBootApplication
  2. public class ConsumerApplication{

  3.     public static void main(String[] args){
  4.         SpringApplication.run(ConsumerApplication.class, args);
  5.     }

  6.     @Slf4j
  7.     @Service
  8.     @RocketMQMessageListener(topic = "test-topic-1", consumerGroup = "my-consumer_test-topic-1")
  9.     public static class MyConsumer1 implements RocketMQListener<String> {
  10.         public void onMessage(String message) {
  11.             log.info("received message: {}", message);
  12.         }
  13.     }
  14. }
复制代码
相关问题

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

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

上面
  1. 192.168.128.3:10911
复制代码
是 docker 容器 IP,这是一个主机内部 IP。这里需要将 IP 设置为云主机的 IP,需要在
  1. broker.conf
复制代码
修改
  1. brokerIP1
复制代码
参数。
mq 控制台无法正常查看 mq 服务信息。
这个问题主要是 nameserver ip 设置错误导致。查看 mq 控制台运维页面,可以看到此时连接的 nameserver 地址信息。

可以看到这里设置的地址为:
  1. 127.0.0.1:9876
复制代码
。由于这里 mq 控制台使用 docker 容器,容器内直接访问
  1. 127.0.0.1:9876
复制代码
将会访问自己内部,而非宿主机内正确程序。
这里需要在 docker 配置环境变量,配置如下:
  1. - JAVA_OPTS= -Dlogging.level.root=info   -Drocketmq.namesrv.addr=rmqnamesrv:9876
复制代码
帮助文档

rocketmq-docker
RocketMq docker 搭建和基本概念
RocketMQ-Spring
作者:Leo_wl    
出处:http://www.cnblogs.com/Leo_wl/
到此这篇关于Docker rocketmq部署的实现示例的文章就介绍到这了,更多相关Docker rocketmq部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
                                                        
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
免责声明
1. 本论坛所提供的信息均来自网络,本网站只提供平台服务,所有账号发表的言论与本网站无关。
2. 其他单位或个人在使用、转载或引用本文时,必须事先获得该帖子作者和本人的同意。
3. 本帖部分内容转载自其他媒体,但并不代表本人赞同其观点和对其真实性负责。
4. 如有侵权,请立即联系,本网站将及时删除相关内容。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表