项目中要用到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简介的更多相关文章

  1. 消息队列MQ集合

    消息队列MQ集合 消息队列简介 kafka简介 Centos7部署zookeeper和Kafka集群 .

  2. 为什么会需要消息队列(MQ)?

    为什么会需要消息队列(MQ)? #################################################################################### ...

  3. 消息队列一:为什么需要消息队列(MQ)?

    为什么会需要消息队列(MQ)? #################################################################################### ...

  4. 详解RPC远程调用和消息队列MQ的区别

    PC(Remote Procedure Call)远程过程调用,主要解决远程通信间的问题,不需要了解底层网络的通信机制. RPC框架 知名度较高的有Thrift(FB的).dubbo(阿里的). RP ...

  5. 消息队列 MQ 入门理解

    功能特性: 应用场景: 消息队列 MQ 可应用于如下几个场景: 分布式事务 在传统的事务处理中,多个系统之间的交互耦合到一个事务中,响应时间长,影响系统可用性.引入分布式事务消息,交易系统和消息队列之 ...

  6. 高并发系统:消息队列MQ

    注:前提是知道什么是消息队列.不懂的去搜索各种消息队列入门(activeMQ.rabbitMQ.rocketMQ.kafka) 1.为什么要使用MQ?(MQ的好处:解耦.异步.削峰) (1)解耦:主要 ...

  7. java面试记录三:hashmap、hashtable、concurrentHashmap、ArrayList、linkedList、linkedHashmap、Object类的12个成员方法、消息队列MQ的种类

    口述题 1.HashMap的原理?(数组+单向链表.put.get.size方法) 非线程安全:(1)hash冲突:多线程某一时刻同时操作hashmap并执行put操作时,可能会产两个key的hash ...

  8. 消息队列MQ核心原理全面总结(11大必会原理)

    消息队列已经逐渐成为分布式应用场景.内部通信.以及秒杀等高并发业务场景的核心手段,它具有低耦合.可靠投递.广播.流量控制.最终一致性 等一系列功能. 无论是 RabbitMQ.RocketMQ.Act ...

  9. 【消息队列MQ】各类MQ比较

    目录(?)[-] RabbitMQ Redis ZeroMQ ActiveMQ JafkaKafka 目前业界有很多MQ产品,我们作如下对比: RabbitMQ 是使用Erlang编写的一个开源的消息 ...

随机推荐

  1. C#连接SAP【生产系统与ERP对接】

    企业如果上了ERP系统,比如SAP.用友.金蝶或者E10等等,只需要ERP里面提供相应的接口,则可以直接将PMC创建的工单信息抛转至 MTS 系统,当该工单生产完成之后,MTS 将完成数据回传至 ER ...

  2. Spring中常见的设计模式——原型模式

    1.原型模式应用场景 当遇到大量耗费劳动力的 get,set赋值场景时,如下: public class SetGetParam { public void setParam(UserDto user ...

  3. 2019年12月1日Linux开发手记

    配置ubuntu摄像头: 1.设置→添加→usb控制器→兼容usb3.0 2.虚拟机→可移动设备→web camera→连接(断开主机) 3.查看是否配置成功,打开终端,输入: susb ls /de ...

  4. tensorflow:模型的保存和训练过程可视化

    在使用tf来训练模型的时候,难免会出现中断的情况.这时候自然就希望能够将辛辛苦苦得到的中间参数保留下来,不然下次又要重新开始. 保存模型的方法: #之前是各种构建模型graph的操作(矩阵相乘,sig ...

  5. 通过 Python 理解 Mixin 概念

    Mixin 的概念 Mixin 即 Mix-in,常被译为"混入",是一种编程模式,在 Python 等面向对象语言中,通常它是实现了某种功能单元的类,用于被其他子类继承,将功能组 ...

  6. 【Android - 自定义View】之自定义可滚动的流式布局

    首先来介绍一下这个自定义View: (1)这个自定义View的名称叫做 FlowLayout ,继承自ViewGroup类: (2)在这个自定义View中,用户可以放入所有继承自View类的视图,这个 ...

  7. int main (int argc, const char * argv[0]) 中参数的含义;指针数组和数组指针

    恩,有的编译器初始化时候会产生这样的参数 argc是命令行总的参数个数,argv[]是argc个参数,其中第0个参数是程序的全名 1. 几种C++ 常见的参数种类 int main(void); in ...

  8. GItBook命令使用(持续更新)

    GitBook基本命令 gitbook init //初始化目录文件 gitbook help //列出gitbook所有的命令 gitbook --help //输出gitbook-cli的帮助信息 ...

  9. shell执行数学运算

    整数: expr let $(()) $[] 浮点数: bc 1.使用expr ♦参与运算的成员和运算符之间必须有一个空格: ♦对于那些容易被shell错解的,在它们传入expr命令之前,需要使用sh ...

  10. React、React Native面试题

    1.React Native相对于原生的ios和Android有哪些优势. react native一套代码可以开发出跨平台app, 减少了人力.节省了时间.避免了 iOS 与 Android 版本发 ...