一、RabbitMQ核心概念以及工作原理

我们来看看流行的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不再操心其他的事情,使用这种方式可以降低服务或者系统之间的耦合。

三、RabbitMQ如何工作的?

我们来简单看看RabbitMQ是如何工作的。

首先来看看RabbitMQ里的几个重要概念:

  • 生产者(Producer):发送消息的应用。
  • 消费者(Consumer):接收消息的应用。
  • 队列(Queue):存储消息的缓存。
  • 消息(Message):由生产者通过RabbitMQ发送给消费者的信息。
  • 连接(Connection):连接RabbitMQ和应用服务器的TCP连接。
  • 通道(Channel):连接里的一个虚拟通道。当你通过消息队列发送或者接收消息时,这个操作都是通过通道进行的。
  • 交换机(Exchange):交换机负责从生产者那里接收消息,并根据交换类型分发到对应的消息列队里。要实现消息的接收,一个队列必须到绑定一个交换机。
  • 绑定(Binding):绑定是队列和交换机的一个关联连接。
  • 路由键(Routing Key):路由键是供交换机查看并根据键来决定如何分发消息到列队的一个键。路由键可以说是消息的目的地址。

生产者(Producer)发送/发布消息到代理->消费者(Consumer)从代理那里接收消息。哪怕生产者和消费者运行在不同的机器上,RabbitMQ也能扮演代理中间件的角色。

当生产者发送消息时,它并不是直接把消息发送到队列里的,而是使用交换机(Exchange)来发送。下面的设计图简单展示了这三个主要的组件之间是如何连接起来的。

交换机代理(exchange agent)负责把消息分发到不同的队列里。这样的话,消息就能够从生产者发送到交换机,然后被分发到消息队列里。这就是常见的“发布”方法。

Producer

然后,消息会被消费者从队列里读取并消费,这就是“消费”。

往多个队列里发送消息

对一个复杂的应用而言,往往会有多个消息队列,所以消息也会被发往多个队列。

Multiple queues

给带有多个队列的交换机发送的消息是通过绑定和路由键来进行分发的。绑定是你设置的用来连接一个队列和交换机的连接。路由键是消息的一个属性。交换机会根据路由键来决定消息分发到那个队列里(取决于交换机的类型)。

交换机(Exchange)

消息并不是直接发布到队里里的,而是被生产者发送到一个交换机上。交换机负责把消息发布到不同的队列里。交换机从生产者应用上接收消息,然后根据绑定和路由键将消息发送到对应的队列里。绑定是交换机和队列之间的一个关系连接。

Exchange

RabbitMQ里的消息流程

  • 生产者(producer)把消息发送给交换机。当你创建交换机的时候,你需要指定类型。交换机的类型接下来会讲到。
  • 交换机(exchange)接收消息并且负责对消息进行路由。根据交换机的类型,消息的多个属性会被使用,例如路由键。
  • 绑定(binding)需要从交换机到队列的这种方式来进行创建。在这个例子里,我们可以看到交换机有到两个不同队列的绑定。交换机根据消息的属性来把消息分发到不同的队列上。
  • 消息(message)消息会一直留在队列里直到被消费。
  • 消费者(consumer)处理消息。

交换机类型

Exchange Type

  1. 直接(Direct):直接交换机通过消息上的路由键直接对消息进行分发。
  2. 扇出(Fanout):一个扇出交换机会将消息发送到所有和它进行绑定的队列上。
  3. 主题(Topic):这个交换机会将路由键和绑定上的模式进行通配符匹配。
  4. 消息头(Headers):消息头交换机使用消息头的属性进行消息路由。

RabbitMQ核心概念

  • 生产者(Producer):发送消息的应用。
  • 消费者(Consumer):接收消息的应用。
  • 队列(Queue):存储消息的缓存。
  • 消息(Message):又生产者通过RabbitMQ发送给消费者的信息。
  • 连接(Connection):连接RabbitMQ和应用服务器的TCP连接。
  • 通道(Channel):连接里的一个虚拟通道。当你通过消息队列发送或者接收消息时,这个操作都是通过通道进行的。
  • 交换机(Exchange):从生产者那里接收消息,并根据交换类型分发到对应的消息列队里。要实现消息的接收,一个队列必须绑定一个交换机。
  • 绑定(Binding):绑定是队列和交换机的一个链接。
  • 路由键(Routing Key):路由键是供交换机查看并根据键的值来决定如何分发消息到列队的一个键。路由键可以说是消息的目的地址。
  • AMQP:AMQP(高级消息队列协议Advanced Message Queuing Protocol)是RabbitMQ使用的消息协议。
  • 用户(Users):在RabbitMQ里,是可以通过指定的用户名和密码来进行连接的。每个用户可以分配不同的权限,例如读权限,写权限以及在实例里进行配置的权限。

如果你已经熟悉了RabbitMQ的核心概念以及它的工作原理,我们接下来就可以通过下面的文章来进行实战了:
RabbitMQ Java HelloWorld Example - 这篇文章会讲解如何在Java里实现RabbitMQ的HelloWorld例子.

RabbitMQ Tutorial with Publish/Subscribe Example - 这篇文章里会讲解RabbitMQ,并一步一步来搭建一个”生产者/消费者“的实例。

参考:

https://www.cnblogs.com/sgh1023/p/11217017.html

https://www.jianshu.com/p/256c502d09cd

RabbitMQ原理及实现相关推荐

  1. [RabbitMQ]RabbitMQ原理与相关操作(一)

    2019独角兽企业重金招聘Python工程师标准>>> RabbitMQ原理与相关操作(一) 小编是菜鸟一枚,最近想试试MQ相关的技术,所以自己看了下RabbitMQ官网,试着写下自 ...

  2. RabbitMQ原理RabbitMQ各组件作用RabbitMQ使用场景

    RabbitMQ原理 RabbitMQ介绍 MQ全称为Message Queue, 是一种分布式应用程序的的通信方法,它是消费-生产者模型的一个典型的代表 producer往消息队列中不断写入消息,而 ...

  3. RabbitMQ原理

    文章目录 1 RabbitMQ原理 1.1 RabbitMQ原理图 1.2 原理讲解 1.2.1 Message消息 1.2.2 Publisher消息生产者 1.2.3 Consumer消息消费者 ...

  4. RabbitMq原理及应用

    一.简介 MQ(Message Queue),即消息队列,是一种实现应用级别之间的通信手段.不同应用之间可以通过读写消息,以消息为媒介传递应用数据,不需要应用之间建立强连接.此方式与远程调用(RPC) ...

  5. RabbitMQ原理及SpringBoot整合RabbitMQ

    RabbitMQ原理及SpringBoot整合RabbitMQ 1. RabbitMQ环境搭建 参考:https://blog.csdn.net/u013071014/article/details/ ...

  6. 消息队列-rabbitmq原理

    RabbitMQ是什么 面向消息的中间件,用于组件间的解耦(主要体现在消息的发送者 与接收者 没有强依赖) RabbitMQ特点 高可用,易扩展,多语言客户端,管理界面. RabbitMQ原理 架构图 ...

  7. rabbitMQ原理+Laravel8简单示例

    一.rabbitMQ原理 #mermaid-svg-tvLwZJeD2JH9GfUm .label{font-family:'trebuchet ms', verdana, arial;font-fa ...

  8. RabbitMQ原理及集群的深入剖析

    RabbitMQ原理及集群的深入剖析 说在前面 RabbitMQ应用场景剖析 RabbitMQ的组件剖析 说一说绑定过程: Exchange类型 一些事项 一些思考 关于持久化 RabbitMQ的集群 ...

  9. RabbitMQ原理讲解

    我们来看RabbitMQ的原理介绍,现在大家看到的这个图呢,其实就是通过图形方式,表达了RabbitMQ的原理结构图,先不着急看第二个图,先来看第一个,其实这个图介绍了RabbitMQ一个消息的提供者 ...

最新文章

  1. HTML5培训好不好
  2. 变焦即可判断物体的距离
  3. vsftp本地用户,虚拟用户,匿名用户同时工作
  4. JAVA字符串的替换replace、replaceAll、replaceFirst的区别解析。
  5. 一分钟教你学会python_十分钟教你学会python编写小游戏
  6. redis作为hibernate的二级缓存
  7. LintCode 550. 最常使用的K个单词II(自定义set(可修改数据的优先队列) + map)
  8. 【面向对象】继承与封装
  9. SpringBoot:@ConfigurationProperties注解使用与源码
  10. 页面全部按钮变成disabled=true_手机也能制作大片!只需轻松几步就能把照片变成视频。...
  11. 调试器---镜像劫持
  12. 多种电压转换的电路设计方案
  13. 前端性能优化gzip压缩
  14. 基于SMTP协议的E-MAIL电子邮件发送客户端软件C#实现
  15. word转pdf的几种方法
  16. 互联网岳麓峰会从长沙走向世界
  17. 蚂蚁金服漆远首谈刚完成的AI重大突破及紧缺人才,呼吁国内多点技术性强的大会,少点网红
  18. Linux 基于ffplay的简易视频播放器(网络+本地)
  19. 软件提示无法正常启动0xc000007b的解决方法
  20. 计算机耦合分类,耦合性 (计算机科学)

热门文章

  1. J2ME的移动支付系统的客户端的实现
  2. 02-通过修改映射在本地模拟Eureka集群
  3. Spring整合Mybatis之关联查询示例
  4. SpringBoot中使用Hibernate Validator校验工具类
  5. 【转载】VMware vSphere中三种磁盘规格的解释说明
  6. js代码优化(不定时更新)
  7. js实现sleep休眠
  8. failed to introspect Class[org.springframework.cloud.context.properties.ConfigurationPropertiesBea]
  9. 高通做服务器芯片有优势吗,为什么高通海思联发科不把芯片面积做的和苹果a系列一样大?性能不就赶上了吗?...
  10. shell菜鸟学习之echo命令