精选文章 RabbitMQ(一):RabbitMQ简介

RabbitMQ(一):RabbitMQ简介

作者:cuibin1991 时间: 2021-02-05 09:43:27
cuibin1991 2021-02-05 09:43:27
【摘要】RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用。作为一名合格的开发者,有必要对RabbitMQ有所了解,本文是RabbitMQ快速入门文章,主要内容包括RabbitMQ是什么、RabbitMQ核心概念、常用交换器类型等。 
RabbitMQ简介 
消息队列提供一个异步通信机制,消息的发送者不必一直等待到消息被成功处理才返回,而是立即返回。消息中间件负...

RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用。作为一名合格的开发者,有必要对RabbitMQ有所了解,本文是RabbitMQ快速入门文章,主要内容包括RabbitMQ是什么、RabbitMQ核心概念、常用交换器类型等。

RabbitMQ简介

消息队列提供一个异步通信机制,消息的发送者不必一直等待到消息被成功处理才返回,而是立即返回。消息中间件负责处理网络通信,如果网络连接不可用,消息被暂存于队列当中,当网络畅通的时候在将消息转发给相应的应用程序或者服务,当然前提是这些服务订阅了该队列。如果在商品服务和订单服务之间使用消息中间件,既可以提高并发量,又降低服务之间的耦合度。

RabbitMQ就是这样一款我们苦苦追寻的消息队列。RabbitMQ是一个开源的消息代理的队列服务器,用来通过普通协议在完全不同的应用之间共享数据。

RabbitMQ是使用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议的。Erlang语言在数据交互方面性能优秀,有着和原生Socket一样的延迟,这也是RabbitMQ高性能的原因所在。可谓“人如其名”,RabbitMQ像兔子一样迅速。

RabbitMQ除了像兔子一样跑的很快以外,还有这些特点: 

  • 开源、性能优秀,稳定性保障
  • 提供可靠性消息投递模式、返回模式
  • 与Spring AMQP完美整合,API丰富
  • 集群模式丰富,表达式配置,HA模式,镜像队列模型
  • 保证数据不丢失的前提做到高可靠性、可用性 

MQ典型应用场景:

  • 异步处理。把消息放入消息中间件中,等到需要的时候再去处理。
  • 流量削峰。例如秒杀活动,在短时间内访问量急剧增加,使用消息队列,当消息队列满了就拒绝响应,跳转到错误页面,这样就可以使得系统不会因为超负载而崩溃。
  • 日志处理。
  • 应用解耦。假设某个服务A需要给许多个服务(B、C、D)发送消息,当某个服务(例如B)不需要发送消息了,服务A需要改代码再次部署;当新加入一个服务(服务E)需要服务A的消息的时候,也需要改代码重新部署;另外服务A也要考虑其他服务挂掉,没有收到消息怎么办?要不要重新发送呢?是不是很麻烦,使用MQ发布订阅模式,服务A只生产消息发送到MQ,B、C、D从MQ中读取消息,需要A的消息就订阅,不需要了就取消订阅,服务A不再操心其他的事情,使用这种方式可以降低服务或者系统之间的耦合。

AMQP协议和RabbitMQ

提到RabbitMQ,就不得不提AMQP协议。AMQP协议是具有现代特征的二进制协议。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

先了解一下AMQP协议中间的几个重要概念: 

  • Server:接收客户端的连接,实现AMQP实体服务。
  • Connection:连接,应用程序与Server的网络连接,TCP连接。
  • Channel:信道,消息读写等操作在信道中进行。客户端可以建立多个信道,每个信道代表一个会话任务。
  • Message:消息,应用程序和服务器之间传送的数据,消息可以非常简单,也可以很复杂。有Properties和Body组成。Properties为外包装,可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body就是消息体内容。
  • Virtual Host:虚拟主机,用于逻辑隔离。一个虚拟主机里面可以有若干个Exchange和Queue,同一个虚拟主机里面不能有相同名称的Exchange或Queue。
  • Exchange:交换器,接收消息,按照路由规则将消息路由到一个或者多个队列。如果路由不到,或者返回给生产者,或者直接丢弃。RabbitMQ常用的交换器常用类型有direct、topic、fanout、headers四种,后面详细介绍。
  • Binding:绑定,交换器和消息队列之间的虚拟连接,绑定中可以包含一个或者多个RoutingKey。
  • RoutingKey:路由键,生产者将消息发送给交换器的时候,会发送一个RoutingKey,用来指定路由规则,这样交换器就知道把消息发送到哪个队列。路由键通常为一个“.”分割的字符串,例如“com.rabbitmq”。
  • Queue:消息队列,用来保存消息,供消费者消费。

下图是AMQP的协议模型:

RabbitMQ(一):RabbitMQ简介1

正如图中所看到的,AMQP协议模型有三部分组成:生产者、消费者和服务端。

生产者是投递消息的一方,首先连接到Server,建立一个连接,开启一个信道;然后生产者声明交换器和队列,设置相关属性,并通过路由键将交换器和队列进行绑定。同理,消费者也需要进行建立连接,开启信道等操作,便于接收消息。

接着生产者就可以发送消息,发送到服务端中的虚拟主机,虚拟主机中的交换器根据路由键选择路由规则,然后发送到不同的消息队列中,这样订阅了消息队列的消费者就可以获取到消息,进行消费。

最后还要关闭信道和连接。

RabbitMQ是基于AMQP协议实现的,其结构如下图所示,和AMQP协议简直就是一模一样。

RabbitMQ(一):RabbitMQ简介2

常用交换器

RabbitMQ常用的交换器类型有direct、topic、fanout、headers四种。

Direct Exchange

该类型的交换器将所有发送到该交换器的消息被转发到RoutingKey指定的队列中,也就是说路由到BindingKey和RoutingKey完全匹配的队列中。

RabbitMQ(一):RabbitMQ简介3

Topic Exchange

该类型的交换器将所有发送到Topic Exchange的消息被转发到所有RoutingKey中指定的Topic的队列上面。

Exchange将RoutingKey和某Topic进行模糊匹配,其中“”用来匹配一个词,“#”用于匹配一个或者多个词。例如“com.#”能匹配到“com.rabbitmq.oa”和“com.rabbitmq”;而"login."只能匹配到“com.rabbitmq”。

RabbitMQ(一):RabbitMQ简介4

Fanout Exchange

该类型不处理路由键,会把所有发送到交换器的消息路由到所有绑定的队列中。优点是转发消息最快,性能最好。

RabbitMQ(一):RabbitMQ简介5

Headers Exchange

该类型的交换器不依赖路由规则来路由消息,而是根据消息内容中的headers属性进行匹配。headers类型交换器性能差,在实际中并不常用。

 

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:2020年成为机器学习工程师,看这9本书就够了!

下一篇:Centos7 挂载新添加的磁盘

CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。

您可能感兴趣 换一换

  • Socket 编程简介

    《Linux 公报》……让Linux更富魅力!  Socket 编程简介 作者:Pedro Paulo Ferreira Bueno 和 Antonio Pires de Castro Junior 译者:小牟 介绍 现在大多数的操作系统都提供了已编译好了的网络通讯程序。TCP/IP范围内最普通的例子就是 web客户端(浏览器) 和web服务器,还有就是FTP和Telnet的客户端和服...

  • 调试利器-----------------------DebugTrace for Windows简介

    首先申明一下,贴这个贴子的目的之一是王婆卖瓜似的推销子做的东东;梁歪一个目的呢就是希望和大家交流一下调试的技巧。:P  软件请到这里下载http://go6.163.com/spring22/html/debugtrace.htm 具体的说明在zip包内。为了能够跟踪用户需求,以及bug反映,请下载的用户发一个mail到luon@hotmail.com    实在不行的话,在这下面签个到留下...

  • asp简介和五大内置对象

    目次 1.ASP基础 2.ASP的五大对象 3.Request对象 4.Response对象 5.Server对象 6.Application对象 7.Session对象 1.ASP基础 Microsoft Active Server Pages,即读者朋友们所称的ASP,是一套微软开发的服务器端脚本环境,ASP内含于IIS之中,最新版的ASP 3.0内含于IIS 5.0之中。通过ASP大家...

  • windows api中定义的基本数据类型简介

    我不知道这是不是应该称为原创,因为这是以前写的,今天翻出来了,不过是我自己整理的。 ATOM                   原子(原子表中的一个字符串的参考)BOOL                   布尔变量BOOLEAN                布尔变量BYTE                   字节(8位)CCHAR                  Windows字符...

  • Huffman 编码简介

    Huffman 编码简介     在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下哈夫曼(HUFFMAN)树和哈夫曼编码。哈夫曼编码是哈夫曼树的一个应用。哈夫曼编码应用广泛,如JPEG中就应用了哈夫曼编码。     首先介绍什么是哈夫曼树。哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层...

  • 跨时代的改进:ADO.NET简介(附图)

    跨时代的改进:ADO.NET简介(附图)   ADO.NET是对Microsoft ActiveX Data Objects (ADO)一个跨时代的改进,它提供了平台互用性和可伸缩的数据访问。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO .NET组件,它可以是基于一个Microsoft Visual Studi...

  • kingofark的第0个五评计划 - kingofark自述与简介

    kingofark的第0个“五评计划”——kingofark自述与简介   [声明]:本文由kingofark创作。本文中的所有内容仅代表kingofark个人的观点,与任何其他个人和团体无关。任何人或团体都可以复制、传播本文,但需附上完整的本声明。kingofark对于不同意上述各点或不履行上述各要求的人或团体的言行不负任何责任。特此声明。     [概要]:本条款介绍了本文作者kingo...

  • 数据库设计及建模工具——ERwin简介

    ERwin用来建立实体-关系(E-R)模型,是关系数据库应用开发的优秀CASE工具。ERwin可以方便地构造实体和联系,表达实体间的各种约束关系,并根据模板创建相应的存储过程、包、触发器、角色等,还可编写相应的PB扩展属性,如编辑样式、显示风格、有效性验证规则等。 ERwin可以实现将已建好的ER模型到数据库物理设计的转换,即可在多种数据库服务器(如Oracle,Sql Server,Wat...

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
RabbitMQ(一):RabbitMQ简介介绍:华为云为您免费提供RabbitMQ(一):RabbitMQ简介在博客、论坛、帮助中心等栏目的相关文章,同时还可以通过 站内搜索 查询更多RabbitMQ(一):RabbitMQ简介的相关内容。| 移动地址: RabbitMQ(一):RabbitMQ简介 | 写博客