RocketMQ快速入门,RocketMQ单机版搭建

概述

RocketMQ 是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于2017年9月25日成为 Apache 的顶级项目。作为经历过多次阿里巴巴双十一这种“超级工程”的洗礼并有稳定出色表现的国产中间件,以其高性能、低延时和高可靠等特性近年来已经也被越来越多的国内企业使用。

为什么用mq?

不用mq,程序间直接通信,耦合度高。而使用mq可以实现应用解耦、流量削峰、内容分发(发布订阅)

应用解耦:

系统的耦合性越高,容错性就越低。以电商应用为例,用户创建订单后,如果耦合调用库存系统,物流系统,支付系统,任何一个子系统出现了故障或者因为升级等原因暂时不可用,都会造成下单操作异常,影响用户体验。

使用消息队列解耦合,系统的可用性就能提高了,比如物流系统发生故障,需要几分钟来修复,再这段时间内,物流系统要处理的数据被缓存到消息队列中,用户的下单操作依然能正常完成。当物流系统恢复后,补充处理存在消息队列中的订单消息即可,终端系统感知不到物流系统发生过几分钟的故障。

下图是使用mq之后的流程图。

流量削峰:

秒杀场景,一下子流量就来了,很容易击垮数据库

应用系统如果遇到请求流量的瞬间猛增,有可能会将系统击垮。有了消息队列就可以将大量请求缓存起来,分散到很长一段时间慢慢处理,这样可以大大提高系统的稳定性和用户体验。

有了MQ以后系统流程图是上面这个样子。一般情况,为了保证系统的稳定性,系统会设置一个阈值,如果超过这个阈值就阻止用户请求,这样会影响用户体验,如果用了消息队列将请求缓存起来,等待系统处理完成以后再通知用户下单完成,这样总比不能下单体验好。并且处于经济考量目的,业务系统正常QPS如果是1000,流量最高峰是10000,为了应对流量高峰配置高性能的服务器是不划算的,这是使用消息队列还是比较经济实惠的。

内容分发(发布订阅):

没用MQ:

使用MQ:

通过消息队列可以让数据再多个系统进行交流,数据的产生方不需要关心谁来使用数据,只需要将消息发送到消息队列,数据使用方订阅消息,直接在消息队列中获取数据即可。

总结RocketMQ优缺点

优点:

解耦,削峰,数据分发

缺点:

系统可用性降低:系统引入的外部依赖越多,系统稳定性就越差,一旦MQ宕机,就会对业务造成影响,但是可以搭建MQ集群实现高可用

系统复杂度提高:MQ的加入大大增加了系统的复杂度,以前系统间是同步远程调用,现在用mq进行异步调用。

快速入门

1、下载压缩包:

下载地址:https://mirror-hk.koddos.net/apache/rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip

环境要求:

Linux 64位

jdk 1.8

Maven 3.2.x

2、上传解压包到服务器

 

目录结构:

目录介绍:

conf文件夹

将rocketmq 安装到usr/local/rocketmq中:

将解压的rocket文件夹复制到usr/local/rocketmq 目录下

3、启用RocketMQ

启动RocketMQ分为三个步骤:(启动NameServer、启动Broker)

步骤一:启动NameServer

tip:如果发现没有nohup命令参考:https://blog.csdn.net/qq_40241957/article/details/98584207

启动成功:nohup sh mqnamesrv &

tip:我刚开始这里启动失败了,看了下bin目录下的nohup.out信息,提示说内存不足,然后给虚拟机加大了内存

就起来了,也可以参考网上的设置,把内存配置小点

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx512m -Xmn256m -XX:MaxMetaspaceSize=320m -XX:MetaspaceSize=128m"

编辑bin目录下runserver.sh文件设置内存:

启动成功 日志会产生在~/logs/rocketmqlogs

查看日志:tail -f ~/logs/rocketmqlogs/namesrv.log

步骤二:启动Broker

进入rocket目录,启动broker的时候,会去连接NameServer

启动:nohup sh bin/mqbroker -n localhost:9876 &

查看启动日志:tail -f ~/logs/rocketmqlogs/broker.log

问题1

执行启动命令以后没有看见日志文件,可以使用java 命令:jps查看已启动的java程序

可以发现broker 并没有起来。

原因:rocketMQ 默认的虚拟机内存比较大,导致broker因为内存不足,启动失败。需要编辑两个配置文件,修改jvm内存大小

vi runbroker.sh

vi runserver.sh

参考配置:

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

启动成功:

可以看见日志文件夹多了好多日志

测试RocketMQ 环境是否正常

启动两个窗口,一个充当消息生产者,一个充当消息消费者

测试结果,可以看出

窗口a

窗口b

生产者发送完消息后,程序就结束了,而消费者还在一直等待消费消息。

停止rocketMQ和NameServer

sh bin/mqshutdown namesrv

sh bin/mqshutdown broker

OK,RocketMQ单机版本入门搭建就完成了,下次再介绍RocketMQ集群搭建。

如果你觉得我的文章对你有帮助,请帮忙点赞+关注!!!

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值