高级消息队列协议AMQP简介

 更新时间:2022年07月02日 14:39:40   作者:天方  
这篇文章简单介绍了高级消息队列协议AMQP,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

历史:

Message Queue的需求由来已久,80年代最早在金融交易中,高盛等公司采用Teknekron公司的产品,当时的Message queuing软件叫做:the information bus(TIB)。 TIB被电信和通讯公司采用,路透社收购了Teknekron公司。之后,IBM开发了MQSeries,微软开发了Microsoft Message Queue(MSMQ)。这些商业MQ供应商的问题是厂商锁定,价格高昂。2001年,Java Message queuing试图解决锁定和交互性的问题,但对应用来说反而更加麻烦了。

于是2004年,摩根大通和iMatrix开始着手Advanced Message Queuing Protocol (AMQP)开放标准的开发。2006年,AMQP规范发布。2007年,Rabbit技术公司基于AMQP标准开发的RabbitMQ 1.0 发布。

基本概念

AMQP基本模型如下图所示:    

Broker:

接收和分发消息的应用,如RabbitMQ Server就是Message Broker。

Virtual host:

出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。

Exchange

交换器是消息送达的实体。他是具名的,它是消息的第一站。系统根据分发规则,匹配查询表中的routing key,分发消息到queue中去。

属性:

  • durable:该交换器将在broker重启后生效。

  • auto-delete:该交换器将在没有消息队列绑定时自动删除。一个从未绑定任何队列的交换器不会自动删除。

类型:

  • direct (point-to-point)

  • fanout (multicast)

  • topic (publish-subscribe)

Queue

队列是接收消息的实体,具有名字和属性,但没有类型。客户端可以订阅队列以便使broker递送某消息队列的内容到该客户端。

属性:

  • alternate-exchange :当消息被订阅者拒绝或者由于队列被删除而孤立时则被送往此交换器,同时队列中的该消息被删除。

  • passive :当队列不存在时会抛出一个错误信息,仍然不会被声明。

  • durable :队列将在broker重启时启动。

  • exclusive :队列仅服务于一个客户端。

  • auto-delete :队列在没有活跃订阅者的时候将自动删除。当客户端终结时,exclusive类型的队列则一定会自动删除。

Binding

绑定是队列和交换器之间的关系,规定消息如何由交换器到队列。绑定的属性被交换器用来与路由算法匹配。

当一个消息的路由关键字与绑定中的模式匹配时,交换器会把该消息的拷贝送达队列。如何进行匹配仅依赖于交换器的类型:

  • direct型 :消息的路由关键字与绑定相同。

  • fanout型 :总是匹配,即使绑定无关键字。

  • topic型 :匹配路由关键字属性,字符串的各个部分以'.'分隔。可包含两个特殊字符:'*'表示单个任意词,'#'表示0个或多个词,例如 *.stock.# 匹配usd.stock和eur.stock.db,但不匹配stock.nasdaq。

  • headers型 :匹配各个键-值对的逻辑组合结果。

Connection:

publisher/consumer和broker之间的TCP连接。断开连接的操作只会在client端进行,Broker不会断开连接,除非出现网络故障或broker服务出现问题。

Channel:

如果每一次访问RabbitMQ都建立一个Connection,在消息量大的时候建立TCP Connection的开销将是巨大的,效率也较低。

Channel是在connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的channel进行通讯,AMQP method包含了channel id帮助客户端和message broker识别channel,所以channel之间是完全隔离的。Channel作为轻量级的Connection极大减少了操作系统建立TCP connection的开销。

到此这篇关于高级消息队列协议AMQP的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 分别使用vue和Android实现长按券码复制功能

    分别使用vue和Android实现长按券码复制功能

    最近分别用vue和Android实现了一个券码复制功能,长按券码会在上方弹出一个拷贝的icon提示,点击icon将券码内容复制到剪贴板。下面小编给大家带来实现代码,需要的朋友参考下吧
    2019-10-10
  • 带你了解HDFS的Namenode 高可用机制

    带你了解HDFS的Namenode 高可用机制

    为了Hadoop更好的应用,Hadoop 2.0 及之后版本增加了 Namenode 高可用机制,本文详细介绍 Namenode 高可用机制,可供大家参考
    2021-08-08
  • 一看就懂的IDEA编辑器 .http教程详解

    一看就懂的IDEA编辑器 .http教程详解

    这篇文章主要介绍了一看就懂的IDEA编辑器 .http教程详解,本文以PHPStorm的ide作为例子的讲解,需要的朋友可以参考下
    2020-11-11
  • kali-linux 202202 安装w3af命令行版的详细过程

    kali-linux 202202 安装w3af命令行版的详细过程

    这篇文章主要介绍了kali-linux 202202 安装w3af命令行版,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • centos搭建code-server配置HTTPS登录页自定义实现步骤

    centos搭建code-server配置HTTPS登录页自定义实现步骤

    这篇文章主要为大家介绍了centos搭建code-server及配置HTTPS、登录页自定义实现步骤详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 一文助你搞懂参数传递原理解析(java、go、python、c++)

    一文助你搞懂参数传递原理解析(java、go、python、c++)

    这篇文章主要介绍了多种语言参数传递原理解析(java、go、python、c++),本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • idea自动生成UML图的实现图文教程

    idea自动生成UML图的实现图文教程

    UML是一种很重要的分析源码工具,本文主要介绍了idea自动生成UML图的实现图文教程,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • 自动驾驶网络到底是什么

    自动驾驶网络到底是什么

    自动驾驶网络(Self-Driving Network)是一种可预测并具有自主运行能力的网络。简单理解华为还是做IT基础设施的网络产品,只不过就是“网络”的自动驾驶。那网络的自动驾驶是什么?这个问题,每个人都有自己的理解,接下来我将来回答一下这个问题。
    2021-05-05
  • Xshell 6安装和使用教程详解

    Xshell 6安装和使用教程详解

    这篇文章主要介绍了Xshell 6安装和使用教程,Xshell 6支持Windows 平台远程协议Telnet、Rlogin、SSH1/SSH2 PKCS#11、SFTP、Serial,本文给大家讲解的非常详细需要的朋友可以参考下
    2022-11-11
  • Windows下安装Git

    Windows下安装Git

    这篇文章介绍了Window下安装Git的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04

最新评论