快速使用rocketmq

快速使用rocketmq

在这里插入图片描述

rocketmq介绍

MQ,Message Queue,是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息生产、存储、消费全过程API的软件系统。消息即数据。一般消息的体量不会很大。
一.MQ的用途
1.限流削峰:当数据库Mysql一秒钟仅能承受2000个请求的同时,当前系统收到了5000个请求都需要mysql处理,此时mysql会被系统压垮,处理不了巨额请求。MQ可以作为中间的“加一层”。让系统后续慢慢处理。

2.异步解耦:在一个电商系统中,当用户点击下单的时候,请求传递到订单账户,当订单账户生成就应该返回给用户您下单成功,而后续工作应该放入MQ中让MQ去申请更改数据库,库存和账户等信息。这就将原来的同步系统结构改为异步系统结构。

3.数据收集:分布式系统会产生海量级数据流,如:业务日志、监控数据、用户行为等。针对这些数据流进行实时或批量采集汇总,然后对这些数据流进行大数据分析,这是当前互联网平台的必备技术。通过MQ完成此类数据收集是最好的选择。

快速理解原理

在这里插入图片描述
所有组件producer,consumer,broker都需要在namserver上进行注册,producer,和comuser都是通过nameserver取拉去broker上面的信息,一个是发送消息一个是接受消息。

工作流程

①启动NameServer,NameServer启动后开始监听端口,等待Broker、Producer、Consumer连接。

②broker启动(优先于生产者,消费者,这个是当然的因为代码中我们要写生产者和消费者),启动完要去nameserver进行一个注册(因为nameserver是无状态,需要broker配置注册上去),Broker会与所有的NameServer建立并保持长连接,然后每30秒向NameServer定时
发送心跳包。
broker告诉nameserver我这个broker负责哪些topic(Topic分片知识),就是broker会告诉nameserverbroker的ip负责的topic(topic可以手动创建也可以自动创建),有多少个queue,这个queue就是我们消息队列中真正存放消息的queue。
在这里插入图片描述

②Producer发送消息,启动时先跟NameServer集群中的其中一台建立长连接,此时producer发现nameserver上有一个broker1,负责topicA,queue1和queue2,此时当我们producer想要投递一条topicA主题的消息的时候,就知道producer应该往broker1中去投递。Broker1中有两个queue,我们可以采用负载轮询的方式,producer就会将masg1放入queue1,将msg2放入queue2,慢慢的就会把这两个queue补满。当然,在获取到路由信息后,Producer会首先将路由信息缓存到本地,再每30秒从NameServer更新一次路由信息。

③此时我们的consumer也启动了,跟其中一台NameServer建立长连接,同样也需要从nameserver中取抓取信息,抓取信息是以topic为单位抓取的,所以它是取抓取topicA的信息,此时nameserver就告诉consumer,broker1负责你的要的topicA,而且它有两个queue,此时consumer就消费这些queue,(如果采取拉取方式,这种实时性不高,还可以采用推送方式,让broker主动推送给consumser)。
Consumer在获取到路由信息后,同样也会每30秒从NameServer更新一次路由信息。不过不同于Producer的是,Consumer还会向Broker发送心跳,以确保Broker的存活状态。

在这里插入图片描述
有几点需要注意:
一个broker中的queue只能被一个consumer消费集群中的一个消费者对应,但是一个消费者可以对应多个broker中的queue。
nameserver是无状态的,如果想要broker感知到必须在broker的配置文件中添加这个nameserver信息才算注册成功。

单机使用rocketmq

window版本使用(不推荐)
1.在rocketmq官网下载一下对应的文件:https://rocketmq.apache.org/download
在这里插入图片描述
2.下载之后解压。在这里插入图片描述
3.配置window环境变量(配置rocketmq所在文件的路径)
在这里插入图片描述
4.启动nameserver
在文件的/bin目录下输入cmd
在这里插入图片描述
然后输入命令开启nameserver
在这里插入图片描述

start mqnamesrv.cmd

当跳出来一个新窗口显示这样代表已经成功了
在这里插入图片描述
5.启动broker
一下命令-n连接ip和端口 autoCreateTopicEnable自动创建topic指令

start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true

出现这样已经成功了
在这里插入图片描述
linux版本使用(推荐)
在这里插入图片描述
使用rocketmq中明确规定要求cenos上的JDK版本在1.8以上。
查看自己在环境变量中的java版本echo $JAVA_HOME
在这里插入图片描述

如果有没安装的可以去官网安装一下:https://www.oracle.com/java/technologies/downloads/
更改cenos中的环境变量vim /etc/profile
配置成你自己的解压的java目录就可以了。
在这里插入图片描述

去rocketmq的官网下载:https://rocketmq.apache.org/download/
在这里插入图片描述
然后进行解压安装,解压命令tar zxvf 文件名.tgz-C
在这里插入图片描述
解压后需要配置两个配置文件(因为rocketmq启动要求内存太大了我们要启动不必要那么大的内存所以可以将启动内存设置小一些)
在这里插入图片描述

修改图中的runserver.sh和runbroker.sh文件。
在这里插入图片描述
在这里插入图片描述

将JAVA_OPT的三项修改为-Xms256m -Xmx256m -Xmn128m。

rocketmq启动
通过官方文档的快速开启:https://rocketmq.apache.org/docs/4.x/%E4%BB%8B%E7%BB%8D/02quickstart
启动NameServer命令

nohup sh bin/mqnamesrv &
启动nameserver
tail -f  ~/logs/rocketmqlogs/namesrv.log
查看日志,如果日志提醒路径错误,可以先用命令mkdir建立路径

同理启动boker命令

nohup sh bin/mqbroker -n localhost:9876 &
tail -f ~/logs/rocketmqlogs/broker.log

消息收发测试

收
$ export NAMESRV_ADDR=localhost:9876
$ sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
发
$ sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

关闭rocketmq

$ sh bin/mqshutdown broker
$ sh bin/mqshutdown namesrv

阿里云启动方式
首先将broker.conf更改

cd conf

vim broker.conf

对应添加
在这里插入图片描述

namesrvAddr=39.104.21.189:9876
brokerIP1=39.104.21.189

启动

nohup sh bin/mqnamesrv -n 39.xx.xx.xxx:9876 &
nohup sh bin/mqbroker -n 39.xx.xx.xxx:9876 -c conf/broker.conf autoCreateTopicEnable=true &
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值