文档地址

RocketMQ架构

哔哩哔哩上的视频

mq有很多,近期买了《分布式消息中间件实践》这本书,学习关于mq的相关知识。mq大致有有4个功能:

  1. 异步处理。比如业务端需要给用户发送邮件,不需要等发送完了之后才让业务端的调用代码返回。
  2. 服务解耦。服务之间调用不需要在代码上写死调用某某服务,只需要发送一个消息即可。这种发送消息的处理一般都是立即返回。类似于生成一个后台job。
  3. 流量削峰。业务系统在做活动的时候短时间内的流量会特别大,基于mq的队列的特性,可以处理这个瞬时流量过大的问题,减轻后端压力。
  4. 消息通讯。主要是订阅机制,类似聊天室。

内容介绍

低延时的分布式消息处理平台,高性能,可扩展,万亿级。由4个部分构成。name server,broker(消息代理人),producer,consumers。这4个都能水平扩展(做成集群的方式)来避免单点故障。

NameServers (集群)

NameServer是一个完整的功能性服务。主要包含以下两个方面:

  • Broker管理。接收Broker集群过来的注册消息,然后提供心跳包机制来检查Broker是否还存活。
  • 路由管理。每一个NameServer都包含关于Broker的完整路由信息,并且队列化处理客户端的查询请求。

有4种方式用于客户端指定NameServer的地址。

  1. 编程方式。类似 producer.setNamesrvAddr("ip:port")
  2. Java 配置。使用 rocketmq.namesrv.addr
  3. 环境变量。使用 NAMESRV_ADDR
  4. http 端点。

提供轻量的服务发现与路由,每一个Name Server记录完整的路由信息,提供相应的读写服务,同时支持快速存储扩展。

Broker (集群)

Broker负责消息的存储和分发,消息查询,高可用保证等。模块如下图所示。

所以,他有以下几个比较重要的子模块:

  • 远程模块。Broker的入口,用于接收客户端过来的请求。
  • 客户端管理。用于(生产者/消费者)模式的客户端管理,维护消费者对主题的订阅。
  • 存储服务。提供一些简单的api用于查询or存储物理磁盘上的消息。
  • 高可用保证服务。提供主从Broker之间的数据同步特性。
  • 索引服务。通过特定的key对消息构建索引,然后提供消息查询。

通过提供轻量级的主题队列机制来负责消息的储存。支持推拉模式,包含错误容忍机制(2或3份拷贝)。消息的顺序处理。提供容灾回复,预警机制等。

Producer (集群)

生产者提供分布式部署。分布式的生产者通过负载均衡的方式发送消息给Broker。支持快速错误反馈,并且低延迟。

Consumer (集群)

消费者也支持在推/拉模式中的分布式部署。支持集群消费+消息广播。提供实时的消息订阅机制以满足大部分需求。

如何运行(单机测试环境)

下载

安装包就好(源码也行),然后解压

wget http://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.5.1/rocketmq-all-4.5.1-bin-release.zip
unzip rocketmq-all-4.5.1-bin-release.zip -d /usr/lib/rocketmq/

改一些配置

环境变量

#配置64位jdk是必须的---这里跳过
export ROCKETMQ_HOME=/usr/lib/rocketmq/rocketmq #这个不是必须,只是方便下面操作
source ~/.bash_profile #使配置生效一下
rm -f ~/logs/rocketmqlogs/*.log # 把日志清了,方便查看

启动参数

rocketmq默认的内存配置要求对我们的测试服务器要求太高了,改低一点。

vim $ROCKETMQ_HOME/bin/runserver.sh
# 把第39行改成
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g" #最小,启动,最大都是1gvim $ROCKETMQ_HOME/bin/runbroker.sh
# 把39行改成
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g" # 同上面

broker配置

vim $ROCKETMQ_HOME/conf/broker.conf
# 加这些配置
brokerIP1 = 192.168.3.20 #此broker的ip
namesvrAddr=192.168.3.20:9876 #nameServer地址,集群的话需要分号分隔。

启动NameServer

因为需要NameServer来管理Broker,所以先启动NameServer。默认的日志地址为~/logs/rocketmqlogs

nohup sh $ROCKETMQ_HOME/bin/mqnamesrv & # 以忽略挂起信号的方式启动nameserver
tail -f ~/logs/rocketmqlogs/namesrv.log # 监控的方式查看日志尾部

启动Broker

消息要通过Broker来分发,NameServer也已经启动,所以现在可以启动Broker。

nohup sh $ROCKETMQ_HOME/bin/mqbroker -c $ROCKETMQ_HOME/conf/broker.conf &
tail -f ~/logs/rocketmqlogs/broker.log

web站点查看

这里需要去下载这个,里面有个rocketmq-console。需要修改一个地方。rocketmq-externals/rocketmq-console/src/main/resources/application.properties

rocketmq.config.namesrvAddr=192.168.3.20:9876 #改成对应的namesrvAddr 地址

服务器上需要开放几个端口用于console的连接,如果没有配置,就是默认的:9876,10911,10909

firewall-cmd --zone=public --add-port=9876/tcp --permanent
firewall-cmd --reload

然后就能查看了。

发送、接收消息

后续通过代码客户端的方式来实践。

关闭服务

sh $ROCKETMQ_HOME/bin/mqshutdown broker #先关了Broker
sh $ROCKETMQ_HOME/bin/mqshutdown namesrv #再关闭nameserver

转载于:https://www.cnblogs.com/sheldon-lou/p/10966575.html

[分布式学习]消息队列之rocketmq笔记相关推荐

  1. 多维度对比5款主流分布式MQ消息队列,妈妈再也不担心我的技术选型了

    1.引言 对于即时通讯网来说,所有的技术文章和资料都在围绕即时通讯这个技术方向进行整理和分享,这一次也不例外.对于即时通讯系统(包括IM.消息推送系统等)来说,MQ消息中件间是非常常见的基础软件,但市 ...

  2. 深入理解分布式技术 - 消息队列使用场景

    文章目录 概述 What's MQ ? 应用场景 系统解耦 异步处理 缓冲请求 数据分发 常见的消息队列 Apache RocketMQ Apache Kafka RabbitMQ 其他 如何选择MQ ...

  3. 分布式消息队列之RocketMQ

    一 RocketMQ概述 1.1 MQ概述 1.1.1 MQ简介 MQ,Message Queue,是一种提供 消息队列服务 的中间件,也称为消息中间件,是一套提供了消息生产.存储.消费全过程API的 ...

  4. rocketmq广播消息为什么不能重试_几分钟带你看懂“消息队列和RocketMQ”的入门总结

    消息队列扫盲 消息队列顾名思义就是存放消息的队列,队列我就不解释了,别告诉我你连队列都不知道似啥吧? 所以问题并不是消息队列是什么,而是 消息队列为什么会出现?消息队列能用来干什么?用它来干这些事会带 ...

  5. 分布式之消息队列复习精讲

    为什么写这篇文章? 博主有两位朋友分别是小A和小B: 小A,工作于传统软件行业(某社保局的软件外包公司),每天工作内容就是和产品聊聊需求,改改业务逻辑.再不然就是和运营聊聊天,写几个SQL,生成下报表 ...

  6. java B2B2C springmvc mybatis电子商务平台源码-消息队列之RocketMQ

    RocketMQ出自阿里公司的开源产品,用 Java 语言实现,在设计时参考了 Kafka,并做出了自己的一些改进,消息可靠性上比 Kafka 更好.RocketMQ在阿里集团被广泛应用在订单,交易, ...

  7. Spring Cloud —— 消息队列与 RocketMQ

    导航 一.什么是 MQ 二.常见的 MQ 产品 三.RocketMQ 概念与架构设计 3.1 基本概念 1.消息模型(Message Model) 2.生产者与消费者(Producer & C ...

  8. 服务器消息不是按顺序来的,消息队列之 RocketMQ(示例代码)

    简介 RocketMQ 特点 RocketMQ 是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于2017年9月25日成为 Apache 的顶级项目.作为经历 ...

  9. 深入理解分布式技术 - 消息队列知识点回顾总结

    文章目录 概述 MQ相关理论和设计 特定MQ的问题 Kafka RocketMQ 概述 我们平常如何评估MQ掌握的怎么样呢? 我觉得可以从以下两点来考虑 针对消息队列的相关理论,比如消息队列重复消费. ...

最新文章

  1. Activity悬浮并可拖动(访悬浮歌词)
  2. 团队分数分配方法——BY 李栋
  3. #中的引用型是什么意识_excel的vlookup函数经常引用错误,让我告诉你原因,迅速脱离误区...
  4. 软件工程——理论、方法与实践⑨
  5. Spring 初识Aop JDK动态代理实现 原理初显
  6. JQuery对selecte中的元素的操作
  7. linux usb 驱动漏洞,不测不知道 这么多的USB漏洞要从何“补”起?
  8. redis线程阻塞原因排插_每次面试都要被问:为什么采用单线程的Redis也会如此之快?...
  9. SAP中的默认帐户与密码
  10. 2008北航计算机考研上机题,2006-2008北航计算机系考研真题(961).pdf
  11. SAP License:工作中的怪现象
  12. mysql tcp优化_mysql 优化
  13. matlab2c使用c++实现matlab函数系列教程-ones函数
  14. Linux下PHP开启Oracle支持(oci8)
  15. DataTable转成字符串复制到txt文本
  16. 数字逻辑课程设计(一):数字时钟——logisam模拟实现
  17. shared_ptr,weak_ptr,unique_ptr
  18. 利用微软Text-To-Speech朗读文本
  19. 【影像组学】理论学习——特征类型
  20. 批量拿webshell工具【最新】

热门文章

  1. 【操作系统】考研の内存管理方法(看不懂你来打我~!)
  2. python【力扣LeetCode算法题库】300 最长上升子序列(动态规划)
  3. 美国计算机专业录取率,美国留学高录取率院校计算机专业申请条件是什么? 爱问知识人...
  4. from import python3_《Python语言程序设计》 —3.3.2 from import
  5. skywalking es7_SpringCloud下skywalking的快速入门
  6. bat java cp_批处理中Copy与Xcopy命令的区别小结
  7. 网络推广策略带你了解网站地图Sitemap的作用是什么?
  8. 六年级下册计算机电子板报教案,小学信息技术闽教版四年级下册第6课 制作电子板报教案设计...
  9. opengl 深度详解_一步步学OpenGL(1) -《打开一个窗口》
  10. 5训练需要更改参数吗_这就是需要的瘦肚子训练,5个杠铃片腹肌训练动作暴汗燃脂瘦腰腹...