简介:
这两天看了消息队列通信,打算在配置平台上应用起来。以前用过zeromq但是这东西太快了,还有就是rabbitmq有点大,新浪的朋友推荐了qpid,简单轻便。自己总结了下文档,大家可以瞅瞅。
AMQP(消息队列协议Advanced Message Queuing Protocol)是一种消息协议 ,等同于JMS,但是JMS只是java平台的方案,AMQP是一个跨语言的协议。
AMQP 不分语言平台,主流的语言都支持,运维这边的perl,python,ruby更是支持,所以大家就放心用吧。
主流的消息队列通信类型:
点对点:A 发消息给 B。 广播:A 发给所有其他人的消息 组播:A 发给多个但不是所有其他人的消息。 Requester/response:类似访问网页的通信方式,客户端发请求并等待,服务端回复该请求 Pub-sub:类似杂志发行,出版杂志的人并不知道谁在看这本杂志,订阅的人并不关心谁在发表这本杂志。出版的人只管将信息发布出去,订阅的人也只在需要的时候收到该信息。 Store-and-forward:存储转发模型类似信件投递,写信的人将消息写给某人,但在将信件发出的时候,收信的人并不一定在家等待,也并不知道有消息给他。但这个消息不会丢失,会放在收信者的信箱中。这种模型允许信息的异步交换。 其他通信模型。。。
Publisher --->Exchange ---> MessageQueue --->Consumer
整个过程是异步的.Publisher,Consumer相互不知道对方的存在,Exchange负责交换/路由,依靠Routing Key,每个消息者有一个Routing Key,每个Binding将自已感兴趣的RoutingKey告诉Exchange,以便Exchange将相关的消息转发给相应的Queue !
几个概念
几个概念 Producer,Routing Key,Exchange,Binding,Queue,Consumer. Producer: 消息的创建者,消息的发送者 Routing Key:唯一用来映射消息该进入哪个队列的标识 Exchange:负责消息的路由,交换 Binding:定义Queue和Exchange的映射关系 Queue:消息队列 Consumer:消息的使用者 Exchange类型 Fan-Out:类似于广播方式,不管RoutingKey Direct:根据RoutingKey,进行关联投寄 Topic:类似于Direct,但是支持多个Key关联,以组的方式投寄。 key以.来定义界限。类似于usea.news,usea.weather.这两个消息是一组的。
wKioL1MA096hj-AFAAENzUSW7c0736.jpg
QPID
Qpid 是 Apache 开发的一款面向对象的消息中间件,它是一个 AMQP 的实现,可以和其他符合 AMQP 协议的系统进行通信。Qpid 提供了 C++/Python/Java/C# 等主流编程语言的客户端库,安装使用非常方便。相对于其他的 AMQP 实现,Qpid 社区十分活跃,有望成为标准 AMQP 中间件产品。除了符合 AMQP 基本要求之外,Qpid 提供了很多额外的 HA 特性,非常适于集群环境下的消息通信!
基本功能外提供以下特性:
采用 Corosync(?)来保证集群环境下的Fault-tolerant(?) 特性
支持XML的Exchange,消息为XML时,彩用Xquery过滤
支持plugin
提供安全认证,可对producer/consumer提供身份认证
qpidd --port --no-data-dir --auth
port:端口
--no-data-dir:不指定数据目录<