[1]AMQP(高级消息队列协议) ----入门

原创 2016年07月02日 23:09:33

接触AMQP协议已经有一段时间了,这个协议比想象的中的要复杂一些,特别是针对AMQP-1-0以前的版本。具体的概念,网上可以搜索到很多的资料,本文借花献佛,让读者对AMQP协议有一个大概的了解。重点是在后续章节的关于一些遇到的技术难点的解决方案的分享。


最新的AMQP协议是1.0,但是以前还包括其他版本的协议

Final Specification by AMQP Working Group:


AMQP 1.0 Final, as contributed to OASIS.

Older Specifications:
AMQP version 0-10 by the AMQP Working Group

AMQP version 0-9-1 by the AMQP Working Group

AMQP version 0-9 by the AMQP Working Group

AMQP version 0-8 by the AMQP Working Group

AMQP的全称是Advanced Message Queuing Protocol,翻译过来就是高级消息队列协议。简单来说,AMQP是一个厂商中立、语言无关的Message Broker规范。(具体请参考http://blog.csdn.net/anyaas/article/details/17637141)

AMQP规范中有几个核心的概念:

  • Message
  • Virtual Host
  • Exchange
  • Queue
  • Binding
  • Routing Key
  • Binding Key
  • Exchange Type
  • Publisher/Producer
  • Subscriber/Consumer
  • Connection
  • Channel

Virtual Host

每个Message Broker由一个或 Virtual Host构成;可以类比一下理机和虚拟机。Virtual Host相当于一个独立的名称空间,它有属于自己的Exchange、Queue以及的一些相关对象。不同Virtual Host之间的Exchange可以重名。Queue只能和相同Virtual Host中的Exchange进行绑定。


Exchange

每个Virtual Host包含0或多个Exchange。Exchange负责把Message转发到Queue。每个Exchange可以有0或者多个Queue。每个Queue只能监听1个Exchange。

Queue

Queue即消息队列,负责存储Exchange转发过来的Message。注意,是Queue,所以Message是First-In-First-Out。


Binding

Binding指的是Exchange根据规则作出消息转发决策的过程。Message到达Exchange,Exchange此时并不知道Message应该被转发到哪些Queue,然后Exchange根据规则对Message进行Binding决策,Binding完成之后,Exchange根据Binding的结果将Message转发到正确的Queues。


Routing Key

每个Message一般来说必须指定一个Routing Key,Exchange根据Message的Routing Key进行Binding,然后完成Message的转发。


Binding Key

每个Queue一般来说必须指定一个Binding Key。 Binding的过程其实就是根据一定的规则判定Message的Routing Key是否与Queue的Binding Key匹配,如果匹配,则转发Message到Queue。如果Message的Routing Key与多个Queue的Binding Key匹配,则所有匹配的Queue都会收到该Message。


Exchange Type

Exchange Type决定了Binding的匹配规则。AMQP支持三种Exchange Type:

  • Direct Exchange
  • Topic Exchange
  • Fanout Exchange

如果你熟悉网络中单播、组播、广播的概念的话,你可以简单理解为:Direct Exchange就是单播,Topic Exchange就是组播,Fanout Exchange就是广播。


Connection

Publisher/Producer与Virutal Host 或 Subscriber/Consumer与Virtual Host之间的TCP连接。


Channel

通过多路复用技术,多个Channel共享同一个Connection。Message通过Channel在Publisher/Producer、Virutal Host、Subscriber/Consumer之间传递。


比较常见的第三方的实现有:

(1) Qpid

Qpid 是 Apache 开发的一款面向对象的消息中间件,它是一个 AMQP 的实现,可以和其他符合 AMQP 协议的系统进行通信。Qpid 提供了 C++/Python/Java/C# 等主流编程语言的客户端库,Qpid 提供了很多额外的 HA 特性,非常适于集群环境下的消息通信。

虽然QPID 有0.9 和1.0的版本,而且1.0的版本有Exchange的功能

因为QPID在我们的plugin只支持1.0的版本,所以在plugin的设计上,Sender activity没有Exchange 属性

它提供了 C++ 和 Java 两个版本的 broker服务端,并支持多种语言的客户端。C++版本的服务器端具备高性能/低消耗以及RDMA支持;而Java版本的服务器则支持JMS。Qpid 还提供了一些额外的特性:

采用 Corosync 来保证了集群环境下的 Fault-tolerant 特性
支持 XML 类型的 Exchange,当消息格式为 XML 时,可以利用 Xquery 进行过滤
支持 plugin,用户可以方便地增加新的功能,比如新的 exchange 类型
提供了安全认证特性,任何 producer/consumer 需要和 broker 通信时,都需要提供身份认证。QPID 的安全认证使用 SSL 协议。
授权协议: Apache
开发语言: Java C/C++
操作系统: 跨平台
官网:http://qpid.apache.org 

比较好的博客有:

https://www.ibm.com/developerworks/cn/opensource/os-cn-qpid1/
http://blog.sina.com.cn/s/blog_5bce66f00101htgr.html

(2) RabbitMQ

RabbitMQ是基于ErLang语言开发的,官方RabbitMQ下载地址:http://www.rabbitmq.com/download.html,选择相应的系统版本,进行下载。Erlang版本的选择尽量选择最新版本即可。

比较好的博客有:

http://jaeger.blog.51cto.com/11064196/1762756(经典)
http://www.voidcn.com/blog/Olaking/article/p-3890458.html
https://geewu.gitbooks.io/rabbitmq-quick/content/RabbitMQ%E4%BB%8B%E7%BB%8D.html


Rabbit in action 中文版可以从下面下载到

http://book.51cto.com/art/201510/495741.htm


(3)ActiveMQ

ActiveMQ是Apache软件基金下的一个开源软件,它遵循JMS1.1规范(Java Message Service),是消息驱动中间件软件(MOM)。它为企业消息传递提供高可用,出色性能,可扩展,稳定和安全保障。ActiveMQ使用Apache许可协议。因此,任何人都可以使用和修改它而不必反馈任何改变。这对于商业上将ActiveMQ用在重要用途的人尤为关键。MOM的工作是在分布式的各应用之间调度事件和消息,使之到达指定的接收者。所以高可用,高性能,高可扩展性尤为关键。

ActiveMQ的目标是在尽可能多的平台和语言上提供一个标准的,消息驱动的应用集成。ActiveMQ实现JMS规范并在此之上提供大量额外的特性。这些额外的特性也会在这本书中详细阐述。

官方网站
http://activemq.apache.org/


ActiveMQ in action 中文版
http://download.csdn.net/detail/jacky68147527/5925161


如何使用安装ActiveMQ?
H:\amqp\apache-activemq-5.13.3\data


如何配置AMQP
http://activemq.apache.org/amqp.html






版权声明:本文为博主原创文章,未经博主允许不得转载。

AMQP协议介绍

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

AMQP协议(经典)

转载:http://kb.cnblogs.com/page/73759/ 当前各种应用大量使用异步消息模型,并随之产生众多消息中间件产品及协议,标准的不一致使应用与中间件之间的耦合限制产品的选择,并增...

AMQP协议简介(源自官网的翻译)

RabbitMQ是基于AMQP协议的消息中间件,在官网的扩展以及中文的资料中,也有相应的介绍,因为翻译的实在是过于细节,本人继续在整理也没有更好的作用了,所以直接给转载过来了,感谢翻译者。...

AMQP协议 中文版

第1章 概述1.1.  本文档的目标这份文档定义了高级消息队列协议,这个协议使得遵从该协议的客户端应用和消息中间件服务器之间能够互相通信。为了完全实现互操作性,我们还定义了消息中间件服务的标准行为。我...

RabbitMQ与AMQP协议详解

转载自:http://geek.csdn.net/news/detail/59979 1. 消息队列的历史  了解一件事情的来龙去脉,将不会对它感到神秘。让我们来看看消息队列(Me...
  • zrjdds
  • zrjdds
  • 2016年08月16日 09:20
  • 834

理解 AMQP协议

当前各种应用大量使用异步消息模型,并随之产生众多消息中间件产品及协议,标准的不一致使应用与中间件之间的耦合限制产品的选择,并增加维护成本。AMQP是一个提供统一消息服务的应用层标准协议,基于此协议的客...
  • burpee
  • burpee
  • 2016年09月14日 13:58
  • 673

AMQP协议-中文-1

一:概述 1.1文档的目的

[2]AMQP(高级消息队列协议) ----QPID不得不说的事

如果说到AMQP协议,则不得不提的就是QPID。QPID的论坛现在十分的活跃,基本上白天提的问题,晚上马上就能得到回复。由此可见QPID的活跃程度。 大家可以到http://qpid.2158936....

消息队列之JMS和AMQP对比

AMQP & JMS对比 初次接触消息队列时,在网上搜索,总是会提到如JMS、AMQP等一些术语。查看了一些文档,对JMS和AMQP的一些理解记录如下。 JMS          通常而言提到J...

oracle 高级队列技术

Oracle AQ是Oracle数据库中集成的一种消息队列机制,可以用于不同应用程序间的消息交互,例如PL/SQL可以通过相应的Package访问队列、C#应该程序可以通过ODP.NET访问队列、Ja...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[1]AMQP(高级消息队列协议) ----入门
举报原因:
原因补充:

(最多只允许输入30个字)