RocketMQ简介
RocketMQ 是阿里巴巴在 2012 年开源的消息队列产品,用 Java 语言实现,在设计时参考了 Kafka,并做出了自己的一些改进,后来捐赠给 Apache 软件基金会,2017 正式毕业,成为 Apache 的顶级项目。RocketMQ 在阿里内部被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,Binglog 分发等场景。经历过多次双十一考验,它的性能、稳定性和可靠性都是值得信赖的。
RocketMQ 有着不错的性能,稳定性和可靠性,具备一个现代的消息队列应该有的几乎全部功能和特性,并且它还在持续的成长中。
RocketMQ 有非常活跃的中文社区,大多数问题可以找到中文的答案。RocketMQ 使用 Java 语言开发,源代码相对比较容易读懂,容易对 RocketMQ 进行扩展或者二次开发。
RocketMQ 对在线业务的响应时延做了很多的优化,大多数情况下可以做到毫秒级的响应,如果你的应用场景很在意响应时延,那应该选择使用 RocketMQ。
RocketMQ 的性能比 RabbitMQ 要高一个数量级,每秒钟大概能处理几十万条消息。
RocketMQ 的劣势是与周边生态系统的集成和兼容程度不够。
详情:https://www.cnblogs.com/liran123/p/13813112.html
RocketMQ搭建
阿里巴巴其中一个核心分布式技术是RocketMq ,作为一款分布式的消息中间件,经过了淘宝双十一的洗礼,在功能和性能上远超过activeMq
1.要知道RocketMQ原生就是支持分布式的,而ActiveMQ原生存在单点性。
2.RocketMQ可以保证严格的消息顺序,而ActiveMQ无法保证!
3.RocketMQ提供亿级消息的堆积能力,这不是重点,重点是堆积了亿级的消息后,依然保持写入低延迟!
4.丰富的消息拉取模式(Push or Pull)
Push好理解,比如在消费者端设置Listener回调;而Pull,控制权在于应用,即应用需要主动的调用拉消息方法从Broker获取消息,这里面存在一个消费位置记录的问题(如果不记录,会导致消息重复消费)。
5.在Metaq1.x/2.x的版本中,分布式协调采用的是Zookeeper,而RocketMQ自己实现了一个NameServer,更加轻量级,性能更好!
6.消息失败重试机制、高效的订阅者水平扩展能力、强大的API、事务机制等等(后续详细介绍)
详情:https://www.jianshu.com/p/3afd610a8f7d
以下进行安装步骤:
一、 获取rocketmq 下载链接
在github上找到对应的版本,获取到下载链接,https://github.com/apache/rocketmq/releases 点击对应的版本,右键获取复制链接地址,得到https://github.com/apache/rocketmq/archive/rocketmq-all-4.7.1.tar.gz
我是下载后直接放到linux服务器中,没有用wget命令下载
如果你的操作软件没有拖拽文件功能可以用wget:
此代码在哪运行安装包就会下在哪,如果在根目录执行的就会下在root里,我是安装在了 /usr/local/rocketMq 中
wget https://github.com/apache/rocketmq/archive/rocketmq-all-4.7.1.tar.gz
解压包:
tar -zxvf rocketmq-all-4.7.1.tar.gz
二、安装maven插件,如果安装了maven则可忽略。
1、由于下载到的rocketmq是源码,需要对源码进行编译,编译使用maven,若linux没有安装,需做该操作
cd /usr/local
mkdir maven
cd maven
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar -zxvf apache-maven-3.6.3-bin.tar.gz
vim /usr/local/maven/apache-maven-3.6.3/conf/settings.xml
2、新增maven镜像地址为阿里云地址:
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
3、修改本地仓库为/usr/local/maven/repository,但是需要注意的是需要LINUX机器/usr/local/maven下没有repository文件夹,故而需要手动创建
cd /usr/local/maven
mkdir repository
以下配置加在镜像地址后面即可
<localRepository>/usr/local/maven/repository</localRepository>
4、配置环境变量,编辑文件/etc/profile
vim /etc/profile
"i"进入编辑状态
在最下面添加以下内容
MAVEN_HOME=/usr/local/maven/apache-maven-3.6.3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
编辑后esc退出编辑后 :wq 回到命令行
5、重新激活一下/etc/profile文件
source /etc/profile
mvn -version
maven配置成功
三、编译rocketmq
在rocketmq目录下执行 ,我的目录是:/usr/local/rocketMq
mvn -Prelease-all -DskipTests clean install -U
如图
四、修改broker.conf配置文件
在conf/broker.conf
中 加入 brokerIP1=你的公网IP
cd /usr/local/rocketMq/rocketmq-rocketmq-all-4.7.1/distribution/target/rocketmq-4.7.1/rocketmq-4.7.1/conf
vim broker.conf
五、rocketmq 启动
该目录就是编译后的rocketmq: /usr/local/rocketMq/rocketmq-rocketmq-all-4.7.1/distribution/target/rocketmq-4.7.1/rocketmq-4.7.1
1、启动命令
注: /data/mq/rocketmq目录没有先要自己创建以下目录
启动NameServer:
nohup sh bin/mqnamesrv > /data/mq/rocketmq/nameserver.log 2>&1 &
查看启动信息:
jps
启动broker:
nohup sh bin/mqbroker -n 127.0.0.1:9876 -c conf/broker.conf autoCreateTopicEnable=true > /data/mq/rocketmq/broker.log 2>&1 &
2、rocketmq服务关闭,先关闭Broker、再关闭NameServer,服务启动的时候正好相反。
关闭broker服务 :
sh bin/mqshutdown broker
关闭namesrv服务:
sh bin/mqshutdown namesrv
六、内存不足错误
如果出现内存不足错误,如图:
这是因为 /usr/local/rocketMq/rocketmq-rocketmq-all-4.7.1/distribution/target/rocketmq-4.7.1/rocketmq-4.7.1/bin 目录下启动 nameserv 与 broker 的 runbroker.sh 和 runserver.sh 文件中默认分配的内存太大,而系统实际内存却太小导致启动失败。解决办法就是修改runbroker.sh 和 runserver.sh里的内存配置,调小一些即可。
七、开放安全组
NameServer的9876端口、Broker的10911、11011、10909、11009端口
如果有防火墙、nginx将端口开放
八、注意
如果出现org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout错误
请参考:https://blog.csdn.net/qq_21460229/article/details/104351178
九、配置rocketmq-console可视化工具
1. 下载开源的rocketmq-externals项目
https://github.com/apache/rocketmq-externals
2. 找到rocketmq-console,先编辑一下rocketmq-console里面的application.properties文件,将项目使用的rocketmq.config.namesrvAddr配置上去(或者在项目启动时,以参数的形式配进去)
如果本地启动则此处为:自己的外网IP:9876
3.将pom文件中mq版本改为自己的mq版本
4.将项目打成jar包放在服务器中运行即可