The Advanced Message Queuing Protocol (AMQP)是一个标准开放的应用层的消息中间件(Message Oriented Middleware)协议。AMQP定义了通过网络发送的字节流的数据格式。因此兼容性非常好,任何实现AMQP协议的程序都可以和与AMQP协议兼容的其他程序交互,可以很容易做到跨语言,跨平台。

 

Development

AMQP由JPMorgan Chase & Co于2006年中旬发布。JPMorgan Chase & Co和iMatix定义协议规范,并由包括Red Hat, Cisco Systems, TWIST, IONA, and iMatix参与开发。截至2009年11月,工作组的成员包括 Bank of America, Barclays, Cisco Systems, Credit Suisse, Deutsche Börse Systems, Envoy Technologies, Inc., Goldman Sachs, Progress Software, iMatix Corporation, JPMorgan Chase Bank Inc. N.A, Microsoft Corporation, Novell, Rabbit Technologies Ltd., Red Hat, Inc., Solace Systems, Tervela Inc., TWIST Process Innovations ltd, WS02 and 29West Inc.

值得一提的是,AMQP的设计目标是建立开放工业标准协议。虽然AMQP的起源于金融服务行业,但是它的用途并不局限于金融行业内。

The AMQP model


分布式模型

AMQP 定义了一系列实体(Entity), 从连接的角度来看, 他们是

Message Broker:连接Client的服务器,他使用AMQP协议与Client交互,并且可以作为集群运行, 但是这些细节并没有写入AMQP的规范。

User: 用户可以连接到Message Broker

Connection: 物理连接, 绑定到用户

Channel:Channel是有状态的逻辑连接。Client连接上执行并行操作应维护不同的Channel。

所有发送和接收的实体(Entity)都在Channel中定义。任何试图声明一个已具名的有不同属性的实体(Entity),都将导致错误。如果需要改变实体(Entity)的属性, 必须先将该实体删除,之后重新定义。实体(Entity)名字必须唯一, Broker根据实体(Entity)名字来判断Client的操作权限。

Exchanges

Exchange 从Client接收消息,并把它们分发到Message Queue

Exchange 的属性

passive:  Exchange不必被声明,但是如果不存在,将会产生错误

durable:如果Broker重起,Exchange 是否还有效

auto-delete:只要发现它没有被绑定到Queue,Exchange将被删除。

 

Queues

Queue用于存放Message,直到有客户端可以处理这个Message。

Queue的属性

alternate-Exchange:当信息被拒绝接收,将转发到这个Exchange,并从Queue中删除。

passive: Queue 不必被声明, 但是如果不存在, 将会产生错误

durable:如果Broker重起,Queue 是否还有效

exclusive:只能有一个Client一个具体的Queue。

auto-delete:如果Queue未被订阅, 则自动删除Queue

Messages

Message一律不具名,并被发送到Exchange。它们由一个Message header和Message content的构成。body是一个包含若干可选的属性的不可见的Message header:

routing-key:这个属性取决于Exchange的类型

immediate:如果Message不能立即被处理, 则将其视为unroutable

delivery-mode:表明该Message是否需要持久保存。

priority:Message的优先级

expiration:Message多久之后失效, 之后将作为unroutable处理

 

Bindings

Binding 是一个Queue和Exchange的逻辑绑定,并指定一个Message如何从Exchange发送到Queue。

Unconditional :请求Exchange的所有的Message。

Conditional on a fixed string :请求Exchange上具有指定routing key的所有Message

Conditional on a pattern match : 请求Exchange上具有指定routing key, 并且符合指定pattern的所有Message

Conditional on multiple fixed strings:请求Exchange上属性符合要求的所有Message

Conditional on multiple fixed strings:请求Exchange上模式符合要求的所有Message

Conditional on algorithmic comparison:请求Exchange上符合算法要求的所有Message

Conditional on content inspection:请求Exchange上内容符合要求的所有Message

Implementations

These are the known publicly available AMQP implementations:

OpenAMQ, original open-source implementation of AMQP, written in C by iMatix. Runs on Linux, AIX, Solaris, Windows, OpenVMS. Includes Broker, APIs in C/C++ and Java JMS, remote admin shell, scripting, federation, failover, and AMQP-over-HTTP via the RestMS protocol.

Apache Qpid, a project in the Apache Foundation with Client APIs that support C++, Ruby, Java, JMS, Python and .NET.

Red Hat Enterprise MRG implements the latest version of AMQP 0-10 providing rich set of features like full management, federation, Active-Active clustering using Qpid as upstream, adds a web console and many enterprise features and "C++, Ruby, Java, JMS, Python .NET" Clients.

RabbitMQ, an independent open-source implementation. The server is written in Erlang, and multiple Clients including Python, Ruby, .NET, Java, JMS, C, PHP, Actionscript, XMPP, STOMP, and AJAX are provided. RabbitMQ is distributed with Ubuntu, FreeBSD ports.

AMQP Infrastructure yum installable AMQP 0-10 (maintained in the latest 3 versions of Fedora) which includes the Broker, management tools, agents and Clients.

ØMQ, a high-performance messaging platform that is able to treat AMQP-compliant Brokers as nodes in distributed messaging network.

Zyre, a Broker that implements RestMS and AMQP to provide RESTful HTTP access to AMQP networks.


reference:

http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol

http://www.cnblogs.com/slime/archive/2009/11/18/1598765.html

Advanced Message Queuing Protocol ( 1 ) 概述的更多相关文章

  1. AMQP(Advanced Message Queuing Protocol)

    一套确定的消息交换功能,也就是“高级消息交换协议模型”.AMQP模型包括一套用于路由和存储消息的功能模块,以及一套在这些模块之间交换消息的规则. 一个网络线级协议(数据传输格式),客户端应用可以通过这 ...

  2. Methods for Using Message Queuing Telemetry Transport for Sensor Networks to Support Sleeping Devices

    Methods support a sleep mode for an embedded device. Embedded devices like sensors and actuators use ...

  3. RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue )协议的开源实现。

    RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue )协议的开源实现. 1. 介绍 RabbitMQ是一个由erlang开发的基于AMQP(Advan ...

  4. Message Queuing(MSMQ)

    一.前言 MicroSoft Message Queuing(微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任 ...

  5. Internet Message Access Protocol --- IMAP协议

    https://en.wikipedia.org/wiki/Internet_Message_Access_Protocol   Internet Message Access Protocol

  6. 服务信息块协议 SMB(Server Message Block protocol)

    SMB(Server Message Block)是协议名,它能被用于Web连接和客户端与服务器之间的信息沟通. SMB协议 SMB最初是IBM的贝瑞·费根鲍姆(Barry Feigenbaum)研制 ...

  7. POP and IMAP - Post Office Protocol and Internet Message Access Protocol

    POP and IMAP - Post Office Protocol and Internet Message Access Protocol 用来从 SMTP Server 上下载邮件的协议. P ...

  8. AMQP 0-9-1 Model Explained Why does the queue memory grow and shrink when publishing/consuming? AMQP和AMQP Protocol的是整体和部分的关系 RabbitMQ speaks multiple protocols.

    AMQP 0-9-1 Model Explained — RabbitMQ http://next.rabbitmq.com/tutorials/amqp-concepts.html AMQP 0-9 ...

  9. Understanding AMQP, the protocol used by RabbitMQ--reference

    RabbitMQ is a lightweight, reliable, scalable and portable message broker. But unlike many message b ...

随机推荐

  1. php中禁止单个ip与ip段访问的代码小结

    1.禁止单个IP <?php //IP访问限制 if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP' ...

  2. Filter(过滤器) 和 interceptor(拦截器)的区别

    Filter(过滤器) 和 interceptor(拦截器)的区别 1.拦截器是基于java反射机制的,而过滤器是基于函数回调的. 2.过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容 ...

  3. mysql:You can't specify target table 'sessions' for update in FROM clause

    更新数据时,在where条件子句里面如果想使用子查询按条件更新部分数据,需要将查询的结果设为临时表.可以参考: https://blog.csdn.net/poetssociety/article/d ...

  4. 记录手机端h5页面碰到的一些问题

    关于input光标在手机端偏移 问题根本:不要使用line-height垂直居中. 解决方法:可直接定义height,然后高度由上下padding值撑开. 移动端清除input光标 ios input ...

  5. MyEclipse使用教程:unattended安装

    [MyEclipse CI 2019.4.0安装包下载] 以下内容适用于2013及以上版本. 运行无提示安装程序 1. 创建一个unattended response文件. 2. 要激活unatten ...

  6. SpringBoot 1.x 之入门

    1 SpringBoot简介 SpringBoot简化Spring应用开发,约定大于配置,去繁从简,just run就能创建一个独立的,产品级别的应用. 背景: J2EE笨重的开发.繁多的配置.低下的 ...

  7. pt-config-diff的使用记录

    pt-config-diff的使用记录 pt-config-diff功能:比较差异两套库配置差不多,性能就是不一样,无奈之举,去比对数据库配置是否相同. 运行的MySQL和运行的MySQL做对比 [r ...

  8. 【NOIP2016提高A组模拟8.19】(雅礼联考day2)公约数

    题目 给定一个正整数,在[1,n]的范围内,求出有多少个无序数对(a,b)满足gcd(a,b)=a xor b. 分析 显然a=b是一定不满足, 我们设\(a>b\), 易得gcd(a,b)&l ...

  9. API网关原理

    1.API网关介绍 API网关是一个服务器,是系统的唯一入口.从面向对象设计的角度看,它与外观模式类似.API网关封装了系统内部架构,为每个客户端提供一个定制的API.它可能还具有其它职责,如身份验证 ...

  10. php上传视频大文件

    理清思路: 引入了两个概念:块(block)和片(chunk).每个块由一到多个片组成,而一个资源则由一到多个块组成 块是服务端的永久数据存储单位,片则只在分片上传过程中作为临时存储的单位.服务端会以 ...