高级消息队列协议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的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 一文读懂吞吐量(TPS)、QPS、并发数、响应时间(RT)概念

    一文读懂吞吐量(TPS)、QPS、并发数、响应时间(RT)概念

    这篇文章主要介绍了吞吐量(TPS)、QPS、并发数、响应时间(RT)概念,在开发中需要先搞懂这些基础知识,才能更好运用,需要的朋友可以参考下
    2020-07-07
  • 比特币上的数独游戏合约的实现代码

    比特币上的数独游戏合约的实现代码

    这篇文章主要介绍了比特币上的数独游戏合约的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 本地化部署 DeepSeek 全攻略(linux、windows、mac系统部署)

    本地化部署 DeepSeek 全攻略(linux、windows、mac系统部署)

    本文详细介绍了在Linux、Windows和Mac系统上本地部署DeepSeek模型的步骤,包括硬件要求、软件环境、模型下载和部署步骤、以及优化与注意事项,感兴趣的朋友一起看看吧
    2025-02-02
  • Typora使用方法

    Typora使用方法

    今天用Typora因为升级了一下,所以需要激活虽然勉强能用,但是老是弹出激活页面,很是苦恼,只能通过百度找方法进行解决一下了,下面跟随小编看下Typora使用方法,需要的朋友可以参考下
    2022-04-04
  • 基数排序算法的原理与实现详解(Java/Go/Python/JS/C)

    基数排序算法的原理与实现详解(Java/Go/Python/JS/C)

    基数排序(RadixSort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。本文将利用Java/Go/Python/JS/C不同语言实现基数排序算法,感兴趣的可以了解一下
    2023-03-03
  • 使用阿里大于(大鱼)平台进行发送手机验证码的流程

    使用阿里大于(大鱼)平台进行发送手机验证码的流程

    这篇文章主要介绍了使用阿里大于(大鱼)平台进行发送手机验证码的流程,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • 深入剖析网关gateway原理

    深入剖析网关gateway原理

    这篇文章主要介绍了网关gateway,本文从网关的背景开始讲起,一次论述网关的依赖,负载均衡,网关的选型等等进行深入的剖细,让大家可以更深一步的了解
    2021-08-08
  • 鸿蒙UI开发之滚动组件overscroll-decor安装和使用介绍

    鸿蒙UI开发之滚动组件overscroll-decor安装和使用介绍

    鸿蒙UI开发之滚动组件overscroll-decor‌是一个开源库,提供一种简单、灵活的方式来实现各种过度滚动(overscroll)动画效果,提升用户的交互体验,该库提供了类似于iOS的过度滚动效果,几乎可以应用于所有Android,如RecyclerView、ListView、GridView、ScrollView等‌
    2024-12-12
  • MAC快速本地部署Deepseek的实现步骤

    MAC快速本地部署Deepseek的实现步骤

    本文介绍了在Mac上快速本地部署Deepseek大语言模型,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • 编程界主流脚本编程语言的比较和选择

    编程界主流脚本编程语言的比较和选择

    这篇文章主要介绍了编程界主流脚本编程语言的比较和选择,本文分析了Unix/Linux Shell、Python/Jython、Ruby/JRuby、Perl、Groovy等脚本语言的优缺点,帮助您快速了解各大语言,需要的朋友可以参考下
    2015-05-05

最新评论