消息队列MQ简介
项目中要用到RabbitMQ,领导让我先了解一下。在之前的公司中,用到过消息队列MQ,阿里的那款RocketMQ,当时公司也做了简单的技术分享,自己也看了一些博客。自己在有道云笔记上,做了一些整理,但后来也就搁在那了。现在有时间,就对MQ的一些简单的概念做下整理吧。
RabbitMQ的一些介绍,请参考https://www.jianshu.com/p/e55e971aebd8,里面对一些概念和使用的讲解还是非常详细的。
什么是消息队列-定义
我们来看下维基百科上面的定义:
是一种进程间通信或同一进程的不同线程间的通信方式,软件的软件的贮列用来处理一系列的输入,通常是来自用户。
消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数。
也就是说:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,知道接收者取回它。
下面是架构图:
Producer:消息生产者,负责生产和发送消息到Broker;
Broker:消息处理中心,负责消息存储、确认、重试等;
Consumer:消息消费中心,负责从Broker中获取消息并处理。
消息队列-特性
异步性:将耗时的同步任务通过发送消息的方式进行异步处理,减少等待时间。
松耦合:不同系统、服务之间可以通过消息队列进行通信,不用关心彼此的实现细节,数据格式一致。
分布式:为了防止消息堵塞,可以对消费者集群进行横向扩展,避免单点故障,同样队列本身也可以。
可靠性:将接收到的消息落盘,就算服务器重启或者发生故障,恢复之后也能重新加载。
应用场景-简单描述
根据特性,应用场景可以简单描述为:
在处理高并发,而且不需要立即获取结果的时候。
常用的消息队列有:
RabbitMQ,RocketMQ,ActiveMQ,Kafka等。数据库Redis或者MySQL也可以实现消息队列模式。Redis实现消息队列模式可以参考之前的一篇介绍Redis的随笔
应用场景-异步处理
应用场景-应用解耦
应用场景-限流削峰
应用场景-日志处理
消息模式介绍-简介
1、点对点模式:REQ/REP
最基本的模式,生产者发送一条消息,消费者去除并消费信息,给出响应后会从队列中删除该消息,所以不能重复发送,只能被一个消费者消费。
2、发布/订阅模式:Pub/Sub
非常常见也是非常有用的一种模式,将发布者与订阅者进行解耦。发布者只负责生产数据,而不需要关心谁是订阅者,有多少订阅者。类比于微信公众号。
3、推/拉模式:Push/Pull
也是一种比较重要的模式,无论是Push端还是Pull端都可以做服务器,绑定到特定的地址等待对方访问。
如果我们在Push端绑定地址,那么这是一个PushServer,对应的PullClient可以链接到这个PushServer往外拉数据;反之,如果建立一个PullServer,对应的PushClient就可以链接到PullServer并往里面压数据。
4、路由/代理模式:Router/Dealer
是一种典型的中间人模式,比较适用于多对多的网络当中,双方在互相不认识的情况下达成共识并交易。类比于:顾客--->超时<--供应商。
使用TurboMQ的注意事项:
1、避免多线程处理消息,减少异步请求,不要开多余的Task去处理消息
2、减少无效的重复推送,高并发下可以利用Redis做一些去重处理。
下图是市场上的一些消息队列MQ:
消息队列MQ简介的更多相关文章
- 消息队列MQ集合
消息队列MQ集合 消息队列简介 kafka简介 Centos7部署zookeeper和Kafka集群 .
- 为什么会需要消息队列(MQ)?
为什么会需要消息队列(MQ)? #################################################################################### ...
- 消息队列一:为什么需要消息队列(MQ)?
为什么会需要消息队列(MQ)? #################################################################################### ...
- 详解RPC远程调用和消息队列MQ的区别
PC(Remote Procedure Call)远程过程调用,主要解决远程通信间的问题,不需要了解底层网络的通信机制. RPC框架 知名度较高的有Thrift(FB的).dubbo(阿里的). RP ...
- 消息队列 MQ 入门理解
功能特性: 应用场景: 消息队列 MQ 可应用于如下几个场景: 分布式事务 在传统的事务处理中,多个系统之间的交互耦合到一个事务中,响应时间长,影响系统可用性.引入分布式事务消息,交易系统和消息队列之 ...
- 高并发系统:消息队列MQ
注:前提是知道什么是消息队列.不懂的去搜索各种消息队列入门(activeMQ.rabbitMQ.rocketMQ.kafka) 1.为什么要使用MQ?(MQ的好处:解耦.异步.削峰) (1)解耦:主要 ...
- java面试记录三:hashmap、hashtable、concurrentHashmap、ArrayList、linkedList、linkedHashmap、Object类的12个成员方法、消息队列MQ的种类
口述题 1.HashMap的原理?(数组+单向链表.put.get.size方法) 非线程安全:(1)hash冲突:多线程某一时刻同时操作hashmap并执行put操作时,可能会产两个key的hash ...
- 消息队列MQ核心原理全面总结(11大必会原理)
消息队列已经逐渐成为分布式应用场景.内部通信.以及秒杀等高并发业务场景的核心手段,它具有低耦合.可靠投递.广播.流量控制.最终一致性 等一系列功能. 无论是 RabbitMQ.RocketMQ.Act ...
- 【消息队列MQ】各类MQ比较
目录(?)[-] RabbitMQ Redis ZeroMQ ActiveMQ JafkaKafka 目前业界有很多MQ产品,我们作如下对比: RabbitMQ 是使用Erlang编写的一个开源的消息 ...
随机推荐
- C语言基础 -- 变量
常用变量类型 地址 小端 低地址保存低位,高地址保存高位 常用于 PC(复杂指令集) 大端 低地址保存高位,高地址保存低位 常用于 ARM/手机/网络(精简指令集)
- pyspark报错Exception: Java gateway process exited before sending its port number解决方法
1.问题 搭建spark的python环境好后简单使用,源代码如下: 然后就给我丢了一堆错误: 2.解决办法 这里指定一下Java的环境就可以了,添加代码: import os os.environ[ ...
- moco框架应用一步到位
1. Moco部署 5.1 运行环境 ü Java运行环境 ü moco-runner-0.11.0-standalone.jar jar包: Windows Java环境配 ...
- 品优购详情页---产品细节模块product_detail
结构搭建 整个大盒子产品细节模块命名为: product_detail(不给高度,注意清除浮动带来的影响) 1号盒子命名为:aside(左侧浮动,有宽带不给高度) 2号盒子命名为:detail(右侧浮 ...
- Oracle SQL command slash
We know that there is "commit" in oracle to submit all data in the session and used very c ...
- 如何看一款app里面所包含的图片
在开发制作App的过程中,有时候会想看看一些精美的App里面所设计的素材.这个时候就需要用到我给大家展现的方法了.下面就看看该如何操作能让一个App呈现出它原始的一面,这次我以Any.Do为例给大家演 ...
- PHP计算两组经纬度坐标之间的距离
定义π define('PI',3.1415926535898); define('EARTH_RADIUS',6378.137); 计算两组经纬度坐标 之间的距离 /** * 计算两组经纬度坐标 之 ...
- 【直播分享】实现LOL小地图英雄头像分析案例【华为云分享】
直播介绍: 当今时代是人工智能高速发展的时代,深度学习已经渗透入经济.工业.军事.娱乐等各各领域的角落.近年来AlphaGo击败李世石更是使得人工智能技术家喻户晓.人工智能在游戏领域的开发依然不断进步 ...
- 你知道 http 响应头中的 ETag 是如何生成的吗
关于 etag 的生成需要满足几个条件 当文件不会更改时,etag 值保持不变.所以不能单纯使用 inode 便于计算,不会特别耗 CPU.这样子 hash 不是特别合适 便于横向扩展,多个 node ...
- 洛谷 题解 CF1151D 【Stas and the Queue at the Buffet】
本蒟蒻又双叒叕被爆踩辣!!! 题目链接 这道题我个人觉得没有紫题的水平. 步入正题 先看题: 共有n个人,每个人2个属性,a,b; 窝们要求的是总的不满意度最小,最满意度的公式是什么? \(ai * ...