最近学习使用 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. VIEWGOOD流媒体平台推进广州图书馆数字化进程
  2. Mysql show Status参数详解
  3. DDos游戏行业受攻击最多
  4. 关于静态类初始化问题----CSharp
  5. python画正方体_python绘制立方体的方法
  6. Mybatis的mapper标签 namespace属性说明
  7. 【POJ - 1275】Cashier Employment(差分约束,建图)
  8. (王道408考研操作系统)第二章进程管理-第三节1:进程同步与互斥的基本概念
  9. 6-1 健壮性与正确性
  10. ICLR'22 | 基于可微分提示的语言模型少样本微调方法
  11. npm ERR! path D:\NodeWWW\webpack\node_modules\fsevents\node_modules
  12. MIMO技术杂谈(一)浅谈分集与复用的权衡_akala啦_新浪博客
  13. 推荐一个不错的新浪微博应用--独到科技
  14. Qt实现全局键盘事件监听器-Windows
  15. sql连表查询、子查询、组合查询
  16. DB2表空间状态列表
  17. Android常用第三方支付
  18. Linux查看系统版号
  19. 如何看待快码编程这一款中文多平台编程工具
  20. 解读运营指标:DAU/MAU

热门文章

  1. PPT设计的数据图表化表现
  2. AndroidManifest.xml 中application 的 android:name 属性作用
  3. OLAP -- ODS 项目总结 -- BI 中的关键
  4. 分组数据筛选(group by后取出每组的第n条数据)
  5. ibatis中输入/输出各种类型的参数分析及#与$区别 (转)
  6. 查找整数的位置c语言,1-1 编程总结:查找整数
  7. 拓端tecdat|数据岗位现状调查报告
  8. 操作系统 生产者消费者问题解释
  9. linux c语言头文件 在另外的地方,linux下的c语言的头文件在windows下头文件是哪几个?...
  10. 【C/C++】C++重复率最高、最经典面试题/笔试题(程序题篇)【持续更新】