【消息队列的功能介绍】

分布式消息队列可以提供应用解耦、流量削峰、消息分发、保证最终一致性、方便动态扩容等功能。

【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——简述的更多相关文章

  1. RocketMQ读书笔记5——消息队列的核心机制

    [Broker简述] Broker是RocketMQ的核心,大部分“重量级”的工作都是由Broker完成的,包括: 1.接受Producer发过来的消息: 2.处理Consumer的消费信息请求: 3 ...

  2. RocketMQ读书笔记4——NameServer(MQ的协调者)

    [NameServer简述] 对于一个消息队列集群来说,系统由很多机器组成,每个机器的角色.IP地址都不相同,而且这些信息是变动的(如在某些情况下,会有新的Producer或Consumer加入). ...

  3. RocketMQ读书笔记7——吞吐量优先的场景

    [Broker端进行消息过滤] 在Broker端进行消息过滤,可以减少无效消息发送到Consumer,少占用网络宽带从而提高吞吐量. [过滤方式1——通过Tag过滤] [ 关于Tag和Key ] 对一 ...

  4. RocketMQ读书笔记6——可靠性优先的使用场景

    [顺序消息] 顺序消费是指消息的产生顺序和消费顺序相同. 比如订单的生成.付款.发货,这三个消息必须按顺序处理才可以. [顺序消息的分类] 全局顺序消息和部分顺序消息. 上面订单的例子,其实是部分顺序 ...

  5. RocketMQ读书笔记3——消费者

    [不同类型的消费者] DefaultMQPushConsumer 由系统控制读取操作,收到消息后自动调用传入的处理方法来处理. DefaultMQPullConsumer 读取操作中的大部分功能由使用 ...

  6. RocketMQ读书笔记2——生产者

    [生产者的不同写入策略] 生产者向消息队列里写入数据,不同的业务需要生产者采用不同的写入策略: 同步发送.异步发送.延迟发送.发送事务消息等. [DefaultMQProduce示例] public ...

  7. 《精通Spring 4.X企业应用开发实战》读书笔记1-1(IoC容器和Bean)

    很长一段时间关注在Java Web开发的方向上,提及到Jave Web开发就绕不开Spring全家桶系列,使用面向百度,谷歌的编程方法能够完成大部分的工作.但是这种不系统的了解总觉得自己的知识有所欠缺 ...

  8. 《Go并发编程实战》读书笔记-初识Go语言

    <Go并发编程实战>读书笔记-初识Go语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在讲解怎样用Go语言之前,我们先介绍Go语言的特性,基础概念和标准命令. 一. ...

  9. 深入探索Android热修复技术原理读书笔记 —— so库热修复技术

    热修复系列文章: 深入探索Android热修复技术原理读书笔记 -- 热修复技术介绍 深入探索Android热修复技术原理读书笔记 -- 代码热修复技术 深入探索Android热修复技术原理读书笔记 ...

随机推荐

  1. python全栈开发_day8_文件的多种读写方式及游标

    一:文件的多种读写方式 主方式:w    r    a 从方式:t     b    + 了解方式:x    u 1)按t(按照字符进行操作): with open("data_1.txt& ...

  2. python自动化 协程函数、二分查找、模块搜索

    协程函数 yiled: 把函数的执行结果封装好__iter__和__next__得到一个迭代器 与return功能类似,都可以返回值,但是return只能返回一次只 def fun(count): p ...

  3. pandas中获取数据框的行、列数

    获取数据框的行.列数 # 获取行数 df.shape[0] # 获取行数 len(df) # 获取列数 df.shape[1]

  4. Angular  CLI

    简介 ng  官方命令行 Angular  CLI 自己的官方文档 https://github.com/angular/angular-cli/wiki/new 常用代码   临时代码 ng new ...

  5. mojing SDK根据坐标进行移动

    using UnityEngine; using UnityEngine.UI; using System.Collections; public class transforms : MonoBeh ...

  6. 关于ie8兼容性问题的处理

    1.replace将单引号变成双引号 var page=user.customConfig.replace(/\‘|’/ig,"\""); 兼容谷歌和ie var pag ...

  7. HTML5定位使用心得

    最近项目中接到一个需求,需要使用百度地图API和HTML5定位特性. 对于百度地图API,没啥好说的,刨它的API就是了. 今天想说说JS定位特性. 浏览器支持 Internet Explorer 9 ...

  8. Notepad++如何删除空行和空白字符

    Notepad++如何删除空行和空白字符 1.Notepad++编辑器在编辑选项里面包括很多功能,编辑->行操作->移除空行(包括空白字符). 2.Notepad++查找替换支持正则替换. ...

  9. android studio应用获取系统属性权限(SystemProperties)

    dependencies { provided files(getLayoutLibPath()) } /** ZhangChao time:2014-12-31,get layoutlib.jar ...

  10. php 命名空间与文件引入

    问题描述:这两天试着自己写一些东西,也是为了复习一下忘了的PHP基础知识,但是写到命名空间的时候遇到了一点问题,在这记录一下:当我写好文件之后,添加了命名空间,结果一直提示命名空间下类不存在,一直以为 ...