[1]AMQP(高级消息队列协议) ----入门
2016-07-02 23:09
495 查看
接触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
每个Message Broker由一个或 Virtual Host构成;可以类比一下理机和虚拟机。Virtual Host相当于一个独立的名称空间,它有属于自己的Exchange、Queue以及的一些相关对象。不同Virtual Host之间的Exchange可以重名。Queue只能和相同Virtual Host中的Exchange进行绑定。
每个Virtual Host包含0或多个Exchange。Exchange负责把Message转发到Queue。每个Exchange可以有0或者多个Queue。每个Queue只能监听1个Exchange。
Queue即消息队列,负责存储Exchange转发过来的Message。注意,是Queue,所以Message是First-In-First-Out。
Binding指的是Exchange根据规则作出消息转发决策的过程。Message到达Exchange,Exchange此时并不知道Message应该被转发到哪些Queue,然后Exchange根据规则对Message进行Binding决策,Binding完成之后,Exchange根据Binding的结果将Message转发到正确的Queues。
每个Message一般来说必须指定一个Routing Key,Exchange根据Message的Routing Key进行Binding,然后完成Message的转发。
每个Queue一般来说必须指定一个Binding Key。 Binding的过程其实就是根据一定的规则判定Message的Routing Key是否与Queue的Binding Key匹配,如果匹配,则转发Message到Queue。如果Message的Routing Key与多个Queue的Binding Key匹配,则所有匹配的Queue都会收到该Message。
Exchange Type决定了Binding的匹配规则。AMQP支持三种Exchange Type:
Direct Exchange
Topic Exchange
Fanout Exchange
如果你熟悉网络中单播、组播、广播的概念的话,你可以简单理解为:Direct Exchange就是单播,Topic Exchange就是组播,Fanout Exchange就是广播。
Publisher/Producer与Virutal Host 或 Subscriber/Consumer与Virtual Host之间的TCP连接。
通过多路复用技术,多个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协议是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
相关文章推荐
- Rabbitmq集群搭建笔记
- 解析ActiveMQ的使用说明总结
- Python通过RabbitMQ服务器实现交换机功能的实例教程
- Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
- 利用Python学习RabbitMQ消息队列
- 详解Python操作RabbitMQ服务器消息队列的远程结果返回
- python使用rabbitmq实现网络爬虫示例
- Python操作RabbitMQ服务器实现消息队列的路由功能
- Linux下PHP扩展amqp安装
- ActiveMQ发消息、收消息、持久化,查询队列剩余消息数、出队数的实现
- activemq报EOFExceptionjvm错误
- ActiveMQ 消息服务(一)
- ActiveMQ 消息服务(二)
- ActiveMQ 消息服务(三)
- Spring+Log4j+ActiveMQ实现远程记录日志——实战+分析
- 基于zookeeper+leveldb搭建activemq集群
- rabbitmq学习
- Python通过RabbitMQ服务器实现交换机功能的实例教程
- Python操作RabbitMQ服务器实现消息队列的路由功能