史上最便捷搭建RocketMQ服务器的方法
作者:不学无数的程序员
地址:my.oschina.net/u/4030990/blog/3232512
最近学习使用 rocketmq,需要搭建 rocketmq 服务端,本文主要记录 rocketmq 搭建过程以及这个过程踩到的一些坑。至于有多简单呢,在本机已有Docker环境的情况下只需要三步即可。
从github上面拉取项目(https://github.com/modouxiansheng/about-docker)
修改
broker.conf
中的brokerIP1
参数,修改为本机IP进入
docker-compose.yml
文件所在路径,执行docker-compose up
命令即可
前言
首先我们是使用Docker进行搭建环境的,所以我们先要在自己机器上的安装Docker,具体的安装过程以及对于Docker的介绍官方文档里面说的很清楚了https://docs.docker.com/get-started/。
我们要搭建RocketMQ服务器,那么我们就要知道大概搭建RocketMQ服务器需要部署哪些东西。对于RocketMQ有一个架构图,如下所示。而图中所示的Producer(生产者)和Consumer(消费者)无需我们搭建,因为那是作为一个服务器进行启动的。nameserver就是一个注册中心一样组件,我们可以将其简单理解成springcloud中的Eureka,那么nameserver是需要我们搭建的。broker就是真正处理消息的地方,也是需要我们搭建的。
正常情况我们搭建上面所提到的两个组件其实就能已经能够满足我们的发送接收消息的需求了。但是通常情况下我们还需要搭建一个Web可视化的平台用来查看MQ的服务状态、消息的消费情况、主题的队列配置等等。这里使用rocketmq-console
。同样也是通过Docker来进行安装。
部署
上面我们提到了需要安装三个组件,那么这三个组件又是需要能够互相通信连接的,考虑到分开部署进行配置连接信息比较麻烦,于是这里我们采用docker-compose
进行配置部署。
首先我们需要创建docker-compose.yml
配置文件。文件内容如下
version: '3.5'
services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_name: rmqnamesrvports:- 9876:9876volumes:- ./logs:/opt/logs- ./store:/opt/storenetworks:rmq:aliases:- rmqnamesrvrmqbroker:image: foxiswho/rocketmq:brokercontainer_name: rmqbrokerports:- 10909:10909- 10911:10911volumes:- ./logs:/opt/logs- ./store:/opt/store- ./conf/broker.conf:/etc/rocketmq/broker.confenvironment:NAMESRV_ADDR: "rmqnamesrv:9876"JAVA_OPTS: " -Duser.home=/opt"JAVA_OPT_EXT: "-server -Xms128m -Xmx128m -Xmn128m"command: mqbroker -c /etc/rocketmq/broker.confdepends_on:- rmqnamesrvnetworks:rmq:aliases:- rmqbrokerrmqconsole:image: styletang/rocketmq-console-ngcontainer_name: rmqconsoleports:- 8080:8080environment:JAVA_OPTS: "-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"depends_on:- rmqnamesrvnetworks:rmq:aliases:- rmqconsolenetworks:rmq:name: rmqdriver: bridge
然后在与docker-compose.yml
同级下面相应的建立三个文件夹conf
、logs
、store
。然后在conf
文件夹下面建立broker.conf
配置文件,所有文件的目录位置如下所示。
docker-compose.yml
conf- broker.conf
logs
store
然后在编写broker.conf
配置文件里面的内容
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.# 所属集群名字
brokerClusterName=DefaultCluster# broker 名字,注意此处不同的配置文件填写的不一样,如果在 broker-a.properties 使用: broker-a,
# 在 broker-b.properties 使用: broker-b
brokerName=broker-a# 0 表示 Master,> 0 表示 Slave
brokerId=0# nameServer地址,分号分割
# namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876# 启动IP,如果 docker 报 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <192.168.0.120:10909> failed
# 解决方式1 加上一句 producer.setVipChannelEnabled(false);,解决方式2 brokerIP1 设置宿主机IP,不要使用docker 内部IP
brokerIP1=192.168.1.16# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4# 是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 !!!这里仔细看是 false,false,false
autoCreateTopicEnable=true# 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true# Broker 对外服务的监听端口
listenPort=10911# 删除文件时间点,默认凌晨4点
deleteWhen=04# 文件保留时间,默认48小时
fileReservedTime=120# commitLog 每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824# ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整
mapedFileSizeConsumeQueue=300000# destroyMapedFileIntervalForcibly=120000
# redeleteHangedFileInterval=120000
# 检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
# 存储路径
# storePathRootDir=/home/ztztdata/rocketmq-all-4.1.0-incubating/store
# commitLog 存储路径
# storePathCommitLog=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/commitlog
# 消费队列存储
# storePathConsumeQueue=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/consumequeue
# 消息索引存储路径
# storePathIndex=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/index
# checkpoint 文件存储路径
# storeCheckpoint=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/checkpoint
# abort 文件存储路径
# abortFile=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/abort
# 限制的消息大小
maxMessageSize=65536# flushCommitLogLeastPages=4
# flushConsumeQueueLeastPages=2
# flushCommitLogThoroughInterval=10000
# flushConsumeQueueThoroughInterval=60000# Broker 的角色
# - ASYNC_MASTER 异步复制Master
# - SYNC_MASTER 同步双写Master
# - SLAVE
brokerRole=ASYNC_MASTER# 刷盘方式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH# 发消息线程池数量
# sendMessageThreadPoolNums=128
# 拉消息线程池数量
# pullMessageThreadPoolNums=128
配置文件中的内容我们只需要改动一点即可,即brokerIP1
这个属性,我们将其更改为我们本机的ip,可以利用ipconfig
进行查看。
修改完以后我们直接在docker-compose.yml
文件所在的位置输入命令docker-compose up
即可启动。启动成功以后在浏览器中输入http://localhost:8080/
即可看到管理页面,就表示我们搭建成功了。
使用Springboot快速上手
这里将会使用 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>
gradle配置如下
implementation 'org.apache.rocketmq:rocketmq-spring-boot-starter:2.0.3'
消费服务发送方配置如下:
## 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);}}
}
到现在为止我们就可以在本机上快乐的试验各种关于RocketMQ的相关东西了。
RocketMQ的Docker配置文件存放处(https://github.com/modouxiansheng/about-docker)
大家可以直接从上面拉取项目,启动RocketMQ只需要两步。
修改
broker.conf
中的brokerIP1
参数,修改为本机IP进入
docker-compose.yml
文件所在路径,执行docker-compose up
命令即可
如果大家不想自己搭建Springboot项目的话,可以从https://github.com/modouxiansheng/Doraemon上面直接拉取下来就行了。
公众号后台回复【2T】有惊喜礼包!
猜你喜欢
1、GitHub 标星 3.2w!史上最全技术人员面试手册!FackBoo发起和总结
2、如何才能成为优秀的架构师?
3、从零开始搭建创业公司后台技术栈
4、程序员一般可以从什么平台接私活?
5、37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...
6、滴滴业务中台构建实践,首次曝光
7、不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事
8、15张图看懂瞎忙和高效的区别!
史上最便捷搭建RocketMQ服务器的方法相关推荐
- 暴露的全局方法_史上最便捷搭建 ZooKeeper 服务器的方法
什么是 ZooKeeper ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁 ...
- 史上最便捷搭建 ZooKeeper 服务器的方法(建议收藏)
点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 每日英文 Do a plain and neat person, looki ...
- hexo史上最全搭建教程(转载)
转载 hexo史上最全搭建教程 2018-09-16 20:19:08 zjufangzh 阅读数 46445 收起 分类专栏: 日常技术 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA ...
- 史上最详细阿里云服务器上Docker部署War包项目 实战每一步都带详细图解!!!
史上最详细阿里云服务器上Docker部署War包项目 实战每一步都带详细图解!!! 部署jar 包方式: https://blog.csdn.net/weixin_45821811/article/d ...
- #史上最详解# IIS服务器查看log日志
windows IIS 目前有两个版本 IIS6.0,与IIS7.5,不同版本默认的日志位置与日志设置均有差别 https://blog.csdn.net/mystonelxj/article/det ...
- 在Ubuntu下搭建FTP服务器的方法
由于整个学校相当于一个大型局域网,相互之间传送数据非常快,比如要共享个电影,传点资料什么的. 所以我们可以选择搭建一个FTP服务器来共享文件. 那么问题来了,有的同学会问,我们既然在一个局域网内,直接 ...
- ftp linux包,图文详解Ubuntu搭建Ftp服务器的方法(包成功)
一.今天下午由于课程的要求不得已做了Ubuntu搭建Ftp服务器的实验,但是实验指导书还是N年前的技术,网上搜了一大把,都是模模糊糊的! 在百般困难中终于试验成功,特把经验分给大家 希望大家少走弯路! ...
- 史上最详细配置阿里镜像加速器方法
史上最详细配置阿里镜像加速器方法 遇到问题及解决过程 我在centos 7下使用 docker pull mysql 命令安装mysql(我在SmarTTV软件上操作的),需要下载很多的文件,而且 ...
- Windows 2008 Server搭建Radius服务器的方法
Windows 2008 Server搭建Radius服务器的方法 在实际使用环境中,TP-LINK无线控制器TL-AC1000使用外部服务器进行Portal远程认证时,需搭建相应认证服务器.本文通过 ...
- 史上最全外链资源寻找方法
很久没来A5发布文章了,期间都在从事seo培训工作,今天笔者在闲暇之余为大家分享一篇<史上最全外链资源寻找方法>的文章. 外链资源寻找的方法是数不胜数,大家只需百度一下便可以看到N个,但是 ...
最新文章
- 什么是php伪静态规则,php设置伪静态规则编写 问题
- 由数字、26个英文字母、下划线或汉字的正则表达式
- 需要排序的最短子数组长度
- python - 定时拍照并发送到qq
- 感恩工作平台心得体会_珍惜工作,感恩企业,从而追求更美好的人生
- Mysql 批量更改数据表和字段的字符集(Mysql UTF-8字符集更改为utf8mb4字符集)
- Win10个人使用软件清单
- AD15将PCB变为自己想要的形状
- 两个人相处久了会越来越像吗? | 无意识模仿的秘密
- 学习了金字塔原理中的SCQA分析法
- 如何做好项目中的风险控制
- [Git命令]上传单个文件到GitHub项目已有文件夹
- USB音频编解码芯片电路方案设计(原理图)|TYPEC音频方案|TYPEC扩展坞方案|USB音频方案
- win7系统安装高版本node
- 控制面板卸载不了程序,教您如何处理控制面板中卸载不掉的软件
- STM32全链路开发实战教程专栏总目录(2022.10.19更新)
- python的win32gui, pyautogui, pywinauto,pynput对比
- 漫画 | 外行对程序员误会有多深!
- 快递地址写错了怎么办?快宝地址清洗(PHP示例)
- IDEA 运行Java swing项目报错误: # Problematic frame: # C [rxtxSerial.dll+0x4465]