ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AMQP协议介绍

2021-07-31 10:35:18  阅读:206  来源: 互联网

标签:协议 AMQP 虚拟主机 Exchange 介绍 Queue 消息 RoutingKey


AMQP概念

是一个协议

  • 高级消息队列协议 Advanced Message Queue Protocol)
  • 是应用层协议的一个开放标准
  • 为面向消息的中间件设计的
  • 同时还是Wire级的协议,它描述了在网络上传输的数据的格式,以字节为流。因此任何遵守此数据格式的数据,器创建和解释的消息,都能与其它兼容工具进行互操作【?尝试总结一下JMS与AMQP的区别】【?尝试了解一下啥是Wire级的协议】

重要的概念(4个)

  • 虚拟主机(virtual host)
    一个虚拟主机额持有一组交换机、队列、绑定。
    虚拟主机存在的必要性:RabbitMq当中,用户只能在虚拟主机额的力度进行权限控制。因此,如果需要禁止A组方位B组的交换机/队列/绑定,必须为A和B分别创建一个虚拟主机。 【?虚拟主机这个元素怎么看着是RabbitMq的概念,查阅其它资料仔细核对AMQP】
    每个RabbitMq服务器都有默认的虚拟主机“/”。【?“/”这个是虚拟主机的代名词吗?】
  • 交换机(exchange)
    用来转发Producer生产的消息。它不做存贮,因此呢,如果没有Queue bind到Exchange上的话,他会直接丢弃掉Producer发来的消息。
  • 队列(queue)
  • 绑定(binding)

其它概念

  • RoutingKey
    简单的解释为:Exchange和Queue的路线。

在这里有个概念,Exchange和Queue都要通过channel来定义,而RoutingKey则只需要在binding时取个名字就行了。【?需要细致的去整理channel、binding这个的深入知识】

消息发送、消费过程总结

  • 发送过程【?从生产者-tcp/信道建立-信道建立 的整个流转的准确表示】
  • 消费者消费过程

Consumer消费消息之前,需要创建一个Queue,并把这个Queue bind 到指定的Exchange上,然后Exchange回报消息转发到Queue上,Queue会负责存储消息,Consumer可以通过主动Pop或者是Subscribe之后被动毁掉的方式从Queue钟取得消息。【?主动Pop或者是Subscribe的概念不明确】

配图

蓝色-clients【生产者、消费者】
绿色-Exchange
红色-Queue

  • 交换机(Exchange),他是发送消息的实体。【?Exchange是发送消息的实体这个说法,有点突兀,有没有更加圆滑的解释】
  • 队列(Queue),这是接收消息的实体。【?Exchange是接收消息的实体,这个说法是相对于Bind来说的吧】
  • 绑定器(Bind),将交换机和对接连接起来,并封装消息的路由信息。【?它是将Exchange和Queue两个给串联起来了,那它做的是什么封装呢】

图解和分析 producer的send message、RabbitMq Server 路由消息、消费者的Receive Message

image

  1. 获取Conection
  2. 获取Channel
  3. 定义Exchange,Queue
  4. 使用一个RoutingKey,蒋Queue Binding到一个Exchange上
  5. 通过指定一个Exchange和一个RoutingKey来将消息发送到对应的Queue上
  6. 接收方接收时,也是获取connectiong,丽娜姐获取channel,然后指定Queue直接到它关系的Queue上取消息,他对Exchange,RoutingKey以及bingding都不关心,到对应的Queue上去取消息就OK了

对于整个过程会有一些疑问持续了解
【?producer在第一次连接时会做啥,或者说producer从建立连接到发送一个条有效的消息到Queue中,对E、Q、R分别做了有几个阶段,以及各个阶段内做了些什么事】
【?按照设计Exchange 与 Queue之间,可以被多条RoutingKey关联,请问这个在实际场景中是否有存在】

参考

AMQP实现原理

标签:协议,AMQP,虚拟主机,Exchange,介绍,Queue,消息,RoutingKey
来源: https://www.cnblogs.com/shuxl/p/15083454.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有