最近学习使用 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/rocketmqcontainer_name: rmqnamesrvports:- 9876:9876volumes:- /opt/rocketmq/logs:/home/rocketmq/logs- /opt/rocketmq/store:/home/rocketmq/storecommand: sh mqnamesrvbroker:image: rocketmqinc/rocketmqcontainer_name: rmqbrokerports:- 10909:10909- 10911:10911- 10912:10912volumes:- /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:9876command: sh mqbroker -n namesrv:9876 -c ../conf/broker.confdepends_on:- namesrvenvironment:- JAVA_HOME=/usr/lib/jvm/jreconsole:image: styletang/rocketmq-console-ngcontainer_name: rocketmq-console-ngports:- 8087:8080depends_on:- namesrvenvironment:- 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 {@Resourceprivate 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);}}
}

相关问题

  1. 消息发送方消息发送异常,异常如图所示: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 参数。

  1. 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

rocketmq 部署启动指南-Docker 版相关推荐

  1. 启动rocketmq_RocketMQ 部署启动指南-Docker 版

    最近学习使用 rocketmq,需要搭建 rocketmq 服务端,本文主要记录 rocketmq 搭建过程以及这个过程踩到的一些坑. 准备工作 在搭建之前,我们需要做一些准备工作,这里我们需要使用 ...

  2. orangepi zero2部署网心云docker版

    orangepi zero2部署网心云docker版 安装docker docker安装网心云 挂载硬盘 设置开机自动挂载 多开 安装docker 一键安装 curl -fsSL https://ge ...

  3. RocketMQ部署安装(非Docker安装)

    1.下载 下载地址:https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.3.2/rocketmq-all-4.3.2-bin-release.z ...

  4. 华为平板安装python_教你用树莓派安装集成docker版openwrt、homeassistant等及一些排坑指南...

    教你用树莓派安装集成docker版openwrt.homeassistant等及一些排坑指南 2020-04-30 18:45:28 30点赞 290收藏 23评论 小编注:此篇文章来自即可瓜分10万 ...

  5. 商业级4G代理搭建指南【搭建篇之Docker版】

    时间过得真快,距离这个系列的上一篇文章<商业级4G代理搭建指南[准备篇]>发布的时间已经过了两个星期了,上个星期由于各种琐事缠身,周二开始就没空写文章了,所以就咕咕咕了. 那么在准备篇中, ...

  6. 虚拟机基本部署(docker版)

    虚拟机部署(docker版) 1.CentOS安装Docker 1.1卸载 1.2.安装Docker 1.3.启动docker 1.4.配置镜像加速 2.docker安装mysql 2.1 启动MyS ...

  7. ubuntu18.04部署tars架构(docker版)

    一.docker安装 1.更新软件源列表 sudo apt-get update 2.安装软件包依赖 sudo apt install apt-transport-https ca-certifica ...

  8. centos 上传jar 命令_centos上快速将一个jar使用docker部署启动

    通常的jar应用,直接部署在服务器上,使用服务器资源直接部署,一个jar,一个启动脚本,就可以了. 最近想到一个场景,让docker时间和宿主机的时间不一样,进行不同应用部署的隔离.整理一下docke ...

  9. 提升10倍生产力:IDEA远程一键部署SpringBoot到Docker

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 IDEA是Java开发利器,springboot是Java生态中最 ...

  10. 部署并使用Docker(Alibaba Cloud Linux 2)

    部署并使用Docker(Alibaba Cloud Linux 2) 更新时间:2021-06-25 14:54 背景信息 部署Docker 使用Docker 制作Docker镜像 本文介绍如何在Al ...

最新文章

  1. 修改mysql   默认字符集 , 默认引擎
  2. 调用链系列四:调用链上下文传递
  3. NC | 植物分泌蛋白酶抑制细菌入侵的机理
  4. 王建民做客第六期青年学者月度沙龙 分享工业软件的开源创新发展模式
  5. 页面怎么把关键字保留下来_怎么做seo优化,以及网站SEO优化计划!
  6. C++中常用字符串相关的编程题
  7. Javaweb MVC设计模式、Modle发展史、项目分层和三层架构
  8. java xml数据解析_java xml解析,数据读取
  9. 漫话:如何给女朋友解释什么是BIO、NIO和AIO?
  10. linux重定向命令语法,linux的重定向命令应用及语法
  11. 学习yield《转》
  12. 谷歌约束控件(ConstraintLayout)扁平化布局入门
  13. 国内完全免费的电子图书下载网址
  14. 【Demo】文件下载操作(console版和web版)
  15. vb.net 教程 6-1 进程 Process类初探
  16. java 中文分词转拼音_如何实现拼音与汉字的互相转换
  17. Linux下新增磁盘
  18. 关于苹果公证(Apple Notarizition)机制的一些总结
  19. moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解
  20. 好听的歌曲单片机c语言程序,单片机C语言程序举例(三)

热门文章

  1. U-BOOT 编译过程
  2. cocos2d-x学习之旅(二):1.2 cocos2d-x Visual Studio2010 开发环境搭建 windows 7 32位
  3. 第十天学习@javascript
  4. 20款优秀的可以替代桌面软件的Web应用(转载自JavaEye)
  5. 拓端tecdat|使用R语言进行多项式回归、非线性回归模型曲线拟合
  6. 拓端tecdat|Python使用矩阵分解法找到类似的音乐
  7. jQuery学习笔记01
  8. 数据结构算法题整理3
  9. Java游戏程序设计教程 4.5打砖块游戏
  10. VScode报错“终端将被任务重用,按任意键关闭