一、 背景介绍

1. 相关概念

AMQP : Advanced Message Queuing Protocol ,  高级消息队列协议, 是应用层协议的一个开发标准,为面向消息的中间件设计。

AMQP 的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全性要求很严格

二、 基本原理

1. 核心组件: Exchange & Queue

RabbitMQ的两大核心组件是Exchange和Queue

上图中, Exchange和Queue,这两者都是在server端,又称为Broker, 这部分是RabbitMQ实现的。而蓝色的则是客户端,通常有Producer和Consumer两种类型

Exchange, 又称交换器, 接受消息和路由信息,然后将消息发送给消息队列。对于每一个虚拟主机内部,交换器有独一无二的名字。应用程序在其权限范围内可以自由的创建、共享、使用和销毁交换机实例

消息队列是一个具名缓存区,它们代表一组消费者应用程序保存消息。应用程序在其权限范围之内可以自由的创建、共享、使用和消费消息队列

消息队列提供了有限制的先进先出保证。服务器会将从某一个生产者发出的同等优先级的消息按照它们进入队列的顺序传递给某个消费者,万一某些消息不能被消费者处理,它们可能会被打乱顺序重新传递

消息队列将消息保存在内存、硬盘,或者这两者的组合之中。消息队列限定在虚拟主机范围之中,消息队列保存消息,并将消息分发给一个或多个订阅客户端

消息队列会跟踪消息的获取情况,消息要出队就必须被获取(acquire和consume是两个动作,先执行acquire,相对于对消息加锁)。这阻止了多个客户端同时获取和消费同一条消息,也可以被用来做单个队列多个消费者之间的负载均衡

2. 重要特性: 持久化

队列和交换机有一个创建时指定的标志durable(持久化)。durable的唯一含义就是具有这个标志的队列和交换机会在重启之后重新建立,它不表示说在队列当中的消息会在重启后恢复。

3. 核心概念:绑定

绑定就是将一个特定的Exchange和一个特定的Queue绑定起来,绑定关键字称为BindingKey

程序中语句声明方法为:

channel.queueBind("Exchange", "Queue", "BindingKey");

Exchange和Queue的绑定可以是多对多的关系。每个发送给Exchange的消息都有一个叫做Routingkey的关键字,Exchange要想将该消息转发给特定队列,该队列与交换器的BindingKey必须与消息的RoutingKey相匹配才行。

4. 通信过程

上图中,左边的客户向右边的客户发送消息

1. 在RabbitMQ中申明Connection

2. 在RabbitMQ中申明Connection

3. 左边的客户获取Connection

4. 左边的客户获取Channel

5. 定义Exchange,Queue

6, 使用一个RoutingKey将Queue Binding 到一个Exchange上

7, 通过指定一个Exchange和一个RoutingKey来讲消息发送到对应的Queue上

8. 接收方在接收时也是获取Connection,接着获取channel,然后指定一个Queue直接到它关心的Queue上取消息,它对Exchange,RoutingKey以及如何binding都不关心,到对应的Queue上取消息就可以了

RabbitMQ研究与应用相关推荐

  1. 复习笔记5-nginx、rabbitmq、redis、jenkins、Docker、ELK、日志、Hadoop

    ActiveMQ RabbitMQ Kafka(大数据) RocketMQ(支持分布式) 参考 E:\work\资料\MQ 消息队列使用场景:核心的有 3 个:解耦.异步.削峰. 解耦:BCD 都要从 ...

  2. 安排,全栈分布式微服务媒资管理系统(视频、代码)

    来源: 来自网络,如侵权请告知博主删除????. 仅学习使用,请勿用于其他- 最近有小伙伴管我要分布式这类的项目,还有问我还有没有前后端分离的项目,还有些问我有没有微服务的,今天找的资源一下子都满足了 ...

  3. Spring Cloud(十一)高可用的分布式配置中心 Spring Cloud Bus 消息总线集成(RabbitMQ)

    上一篇文章,留了一个悬念,Config Client 实现配置的实时更新,我们可以使用 /refresh 接口触发,如果所有客户端的配置的更改,都需要手动触发客户端 /refresh ,当服务越来越多 ...

  4. 面试官:说说RabbitMQ 消费端限流、TTL、死信队列

    欢迎关注方志朋的博客,回复"666"获面试宝典 1. 为什么要对消费端限流 假设一个场景,首先,我们 Rabbitmq 服务器积压了有上万条未处理的消息,我们随便打开一个消费者客户 ...

  5. RabbitMQ 中 7 种消息队列

    点击关注公众号,Java干货及时送达 七种模式介绍与应用场景 简单模式(Hello World) 做最简单的事情,一个生产者对应一个消费者,RabbitMQ相当于一个消息代理,负责将A的消息转发给B ...

  6. RabbitMQ 七种队列模式应用场景案例分析(通俗易懂)

    点击关注公众号,Java干货及时送达 作者:我思知我在 blog.csdn.net/qq_32828253/article/details/110450249 七种模式介绍与应用场景 简单模式(Hel ...

  7. rocketmq python 一个进程订阅多个topic_玩转不同业务场景,这些RabbitMQ特性会是得力助攻...

    原标题:玩转不同业务场景,这些RabbitMQ特性会是得力助攻 我是在解决分布式事务的一致性问题时了解到的RabbitMQ,当时主要是要基于RabbitMQ来实现我们分布式系统之间对有事务可靠性要求的 ...

  8. RabbitMQ Java 基本API

    2019独角兽企业重金招聘Python工程师标准>>> API 一.exchangeDeclare 交换器声明 /*** Declare an exchange, via an in ...

  9. Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点?

    面试题 为什么使用消息队列? 消息队列有什么优点和缺点? Kafka.ActiveMQ.RabbitMQ.RocketMQ 都有什么区别,以及适合哪些场景? 面试官心理分析 其实面试官主要是想看看: ...

最新文章

  1. 关键路径最早最迟开始时间
  2. 接收端收到数据包以后的处理过程
  3. Apache Camel 2.21发布–新增功能
  4. 你还在代码里做读写分离么,试试这个中间件吧!
  5. Eclipse 编码区-保护色-快捷大全
  6. MySQL集群架构-DRBD+headbeat +lvs+keepalived
  7. Copilot 自动编程AI工具
  8. C#Excel上传批量导入sqlserver
  9. win7计算机添加用户名和密码错误,Win7家庭组如何创建共享及其密码错误怎么办?...
  10. 这个图像工具箱,让我找得好苦
  11. 合作开发过程产生的专利_合作开发合同和技术联营合同的区别及
  12. 从定时任务-到任务调度系统xxl-job
  13. python mongdb 和 mysql简单使用
  14. ViewData与ViewBag比较
  15. Ubuntu布置Django项目
  16. 一条命令(dd)制作Centos(Linux)优盘(U盘)启动盘
  17. leetcode 5383. 给 N x 3 网格图涂色的方案数
  18. 用计算机计算下列各式 11x,用计算器计算有理数的乘方教学设计实例
  19. 聊聊不确定性和确定性------化不确定性为确定性
  20. [实战篇]关于QQ邮箱登录之测试用例

热门文章

  1. Merge Two Sorted Lists LeetCode
  2. Oracle 的学习方法
  3. 计篇-之一文言文翻译
  4. Using ZipLib to create a Zip File in C#
  5. CodeForces - 916D Jamie and To-do List(主席树+模拟)
  6. CodeForces - 594A Warrior and Archer(思维+博弈)
  7. HDU - 6186 CS Course(维护前缀+后缀)
  8. html css 画五角星,纯 CSS3 绘制图形(心形、五角星、六边形等)
  9. 两个相邻盒子的边框怎么只显示一个_一篇文章带你快速理解盒子模型「经典案例」...
  10. 27计算机表演赛命题,27届计算机表演赛命题搜索赛答案(数学3)