RocketMQ读书笔记1——简述
【消息队列的功能介绍】
分布式消息队列可以提供应用解耦、流量削峰、消息分发、保证最终一致性、方便动态扩容等功能。
【MQ使用场景1——应用解耦】
复杂的系统如电商系统,会存在多个子系统,如订单系统、库存系统、物流系统、支付系统。如果各个子系统之间耦合性太强,会导致整体系统的可用性大幅降低,多个低错误率的子系统强耦合,会得到一个高错误率的整体系统。
用户创建订单后,如果耦合地调用库存系统、物流系统、支付系统,任何一个子系统出现故障不可用,都会造成下单操作异常,影响用户体验。

[ 举例——通过MQ解耦应用,提高系统的可用性和稳定性 ]
基于消息队列的方式后,解耦各个应用,能提高系统的可用性。如果物流系统发生故障,需要几分钟来修复,在这几分钟里,物流系统需要被处理的订单信息内容缓存在消息队列中,用户下单可以正常完成,当物流系统恢复后,补充处理存储在队列的订单信息即可,用户感知不到物流系统发生过的几分钟故障。
【MQ使用场景2——流量削峰】
秒杀活动,大部分的应用系统流量会瞬间猛增,这个时候没有缓冲机制,系统要承受短时的大流量冲击,通过消息队列,可以把大量的请求缓存起来,让系统合理处理这些请求,虽然系统的处理时间增长了,但是能大大提高系统的稳定性和用户体验。
[ 举例——流量削峰提高系统的可用性 ]
比如,如果订单系统每秒最多处理1W次下单,在秒杀活动时,可能短时间内,每秒有10W请求,为了保证系统的稳定性:
不加消息队列:
订单超过1W次,就不允许用户下单了。
加了消息队列:
可以取消1W这个限制,把请求缓存在消息队列中,系统提高时长来处理,有的用户请求可能会在下单十几秒后才会收到下单成功的状态,但是也比不能下单要好。
[ 小结 ]
使用消息队列进行流量削峰,很多使用是出于经济考虑。有的业务系统,流量最高峰QPS也不会超过1W的QPS,而平时只有1K左右的QPS,这种情况,可以考虑使用一个普通性能的服务器(只需支持1K左右的QPS),然后加个消息队列作为高峰请求的缓冲,这样可以节省很多资金。
【MQ使用场景3——消息分发】
在大数据这块,数据的产生方会把各自的数据写入一个消息队列即可,数据的使用方根据各自的需求订阅感兴趣的数据,不同的数据团队所订阅的数据可以重复也可以不重复,互不干扰,也不必和数据产生方关联。
[ 举例——消息分发 ]
各个子系统将日志文件不停写入消息队列,不同的数据处理系统有各自的Offset,互不影响。甚至某个团队处理完的结果也可以写入消息队列,作为数据的产生方,供其他团队使用,避免重复计算。

【RocketMQ的基本指令】
【1.启动消息队列】
启动NameServer
nohup sh bin/mqnamesrv &
tail -f ~/logs/rocketmqlogs/namesrv.log
提示:
The Name Server boot success...
启动Broker
nohup sh bin/mqbroker -n localhost:&
tail -f ~/logs/rocketmqLogs/broker.log
提示:
The broker[%s, 192.168.0.233:10911] boot success...
【2.关闭消息队列】
关闭 NameServer
sh bin/mqshutdown broker
提示:
The mqbroker(36695) is running...
send shutdown request to mqbroker(36695) OK
关闭 Broker
sh bin/mqshutdown namesrv
提示:
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OK
【用命令行发送和接受消息】
RocketMQ读书笔记1——简述的更多相关文章
- RocketMQ读书笔记5——消息队列的核心机制
[Broker简述] Broker是RocketMQ的核心,大部分“重量级”的工作都是由Broker完成的,包括: 1.接受Producer发过来的消息: 2.处理Consumer的消费信息请求: 3 ...
- RocketMQ读书笔记4——NameServer(MQ的协调者)
[NameServer简述] 对于一个消息队列集群来说,系统由很多机器组成,每个机器的角色.IP地址都不相同,而且这些信息是变动的(如在某些情况下,会有新的Producer或Consumer加入). ...
- RocketMQ读书笔记7——吞吐量优先的场景
[Broker端进行消息过滤] 在Broker端进行消息过滤,可以减少无效消息发送到Consumer,少占用网络宽带从而提高吞吐量. [过滤方式1——通过Tag过滤] [ 关于Tag和Key ] 对一 ...
- RocketMQ读书笔记6——可靠性优先的使用场景
[顺序消息] 顺序消费是指消息的产生顺序和消费顺序相同. 比如订单的生成.付款.发货,这三个消息必须按顺序处理才可以. [顺序消息的分类] 全局顺序消息和部分顺序消息. 上面订单的例子,其实是部分顺序 ...
- RocketMQ读书笔记3——消费者
[不同类型的消费者] DefaultMQPushConsumer 由系统控制读取操作,收到消息后自动调用传入的处理方法来处理. DefaultMQPullConsumer 读取操作中的大部分功能由使用 ...
- RocketMQ读书笔记2——生产者
[生产者的不同写入策略] 生产者向消息队列里写入数据,不同的业务需要生产者采用不同的写入策略: 同步发送.异步发送.延迟发送.发送事务消息等. [DefaultMQProduce示例] public ...
- 《精通Spring 4.X企业应用开发实战》读书笔记1-1(IoC容器和Bean)
很长一段时间关注在Java Web开发的方向上,提及到Jave Web开发就绕不开Spring全家桶系列,使用面向百度,谷歌的编程方法能够完成大部分的工作.但是这种不系统的了解总觉得自己的知识有所欠缺 ...
- 《Go并发编程实战》读书笔记-初识Go语言
<Go并发编程实战>读书笔记-初识Go语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在讲解怎样用Go语言之前,我们先介绍Go语言的特性,基础概念和标准命令. 一. ...
- 深入探索Android热修复技术原理读书笔记 —— so库热修复技术
热修复系列文章: 深入探索Android热修复技术原理读书笔记 -- 热修复技术介绍 深入探索Android热修复技术原理读书笔记 -- 代码热修复技术 深入探索Android热修复技术原理读书笔记 ...
随机推荐
- Django之ContentTypes
ContentTypes是什么? ContentTypes是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中. 每当我们创建了新的mode ...
- python 小练习('''产生了多少个对象''')('''模拟两个英雄,昵称,攻击力,生命值''')
'''小练习 计数器,产生了多少个对象''' # class Student: # school = 'luffycity' # count = 0 # def __init__(self, name ...
- linux 查看进程启动时,用户的工作目录
在linux下查看进程大家都会想到用 ps -ef|grep XXX可是看到的不是全路径,怎么看全路径呢?每个进程启动之后在 /proc下面有一个于pid对应的路径例如:ps -ef|grep pyt ...
- 时钟时间,系统cpu时间,用户cpu时间
进程的3种状态:阻塞,就绪,运行 度量一个进程的执行时间,unix为进程维护了3个时间,即时钟时间,用户CPU时间,系统CPU时间. 时钟时间又被称为墙上时钟时间,wall clock tim ...
- Java - String中的==、equals及StringBuffer(转自CSDN 作者:chenrui_)
equals是比较值/对象是否相同,==则比较的是引用地址是否相同. == 如果是基本类型则表示值相等,如果是引用类型则表示地址相等即是同一个对象 package com.char3; public ...
- JAVA学习6:用Maven创建Spring3 MVC项目
一. 环境 spring-framework-3.2.4.RELEASE jdk1.7.0_11 Maven3.0.5 eclipse-jee-juno-SR2-win32 二. ...
- Oracle 客户端安装
Oracle 客户端的安装方式一种有两种: 1.Oracle标准客户端 点击下载 这是Oracle提供的标准版11r2的客户端 2.Oracle Database Instant Client(即 ...
- MyBatis整合Spring详细教程
1整合思路 1.SqlSessionFactory对象应该放到spring容器中作为单例存在. 2.传统dao的开发方式中,应该从spring容器中获得sqlsession对象. 3.Mapper代理 ...
- robots 小记
简介 网站所有者使用/robots.txt文件向网站机器人提供有关其网站的说明;这称为 Robots Exclusion Protocol.它的工作原理是这样的:robot 想要访问一个网站URL,比 ...
- java中的各种命令参数
java中有很多命令参数,这些命令参数有些是控制jvm行为的,有的则是供应用程序使用.我所了解的参数主要有三种,现在说一说这三种类型的参数. (1)命令行参数. 命令行参数就是类似与c语言的命令行参数 ...