JMS 和QPID(2)——QPID

1. 简介

Qpid Apache 开发的一款面向对象的消息中间件,它是一个 AMQP 的实现,可以和其他符合 AMQP 协议的系统进行通信。Qpid 提供了 C++/Python/Java/C# 等主流编程语言的客户端库,安装使用非常方便。相对于其他的 AMQP 实现,Qpid 社区十分活跃,有望成为标准 AMQP 中间件产品。除了符合 AMQP 基本要求之外,Qpid 提供了很多额外的 HA 特性,非常适于集群环境下的消息通信。


2.使用场景

企业级的应用软件往往有着各种各样从简单到复杂的通信需求,表现为不同的通信模型。常见的有:

1点对点:A 发消息给 B

2广播:A 发给所有其他人的消息

3组播:A 发给多个但不是所有其他人的消息。

4Requester/response:类似访问网页的通信方式,客户端发请求并等待,服务端回复该请求

5Pub-sub:类似杂志发行,出版杂志的人并不知道谁在看这本杂志,订阅的人并不关心谁在发表这本杂志。出版的人只管将信息发布出去,订阅的人也只在需要的时候收到该信息。

6Store-and-forward:存储转发模型类似信件投递,写信的人将消息写给某人,但在将信件发出的时候,收信的人并不一定在家等待,也并不知道有消息给他。但这个消息不会丢失,会放在收信者的信箱中。这种模型允许信息的异步交换。

JMS 是标准化的一种努力,但其缺点在于 JMS J2EE 的标准,假如不是采用 Java 技术实现的产品,想使用 JMS 还是比较麻烦的。Qpid 就是一款功能强大,平台 / 语言无关,标准化的面向消息的中间件产品。它实现了可靠复杂的通信中间件,支持多种通信模型,效率高,平台语言无关,而且实现了业界的通信标准AMQP


3 . AMQP QPID

   AMQP Advanced Message Queuing Protocol,即高级消息队列协议。和前面罗列的技术不同,AMQP 是一个标准化的消息中间件协议。她的理想是让不同语言,不同系统的应用互相通信,并提供一个简单统一的模型和编程接口。这样,人们就可以采用各种语言和平台来实现自己的应用,当需要和其他系统通信时,只要承认 AMQP 协议即可。

AMQP 的基本构架如下:

JMS 和QPID(2)——QPID_第1张图片

AMQP 模型中,消息的 producer Message 发送给 ExchangeExchange 负责交换 / 路由,将消息正确地转发给相应的 Queue。消息的 Consumer Queue 中读取消息。这个过程是异步的,Producer Consumer 没有直接联系甚至可以不知道彼此的存在。

Exchange 如何进行路由的呢?这便依靠 Routing Key,每个消息都有一个 routing Key,而每个 Queue 都可以通过一个 Binding 将自己所感兴趣的 Routing Key 告诉 Exchange,这样 Exchange 便可以将消息正确地转发给相应的 Queue

   QPID Apache Foundation 的一个开源项目,是一个 AMQP 实现。它提供了 C++ Java 两个版本的 broker,并支持多种语言的客户端,它还包括一个配置工具集。除了完全实现了 AMQP 的基本功能之外,Qpid 还提供了一些额外的特性:

1采用 Corosync 来保证了集群环境下的 Fault-tolerant 特性

2支持 XML 类型的 Exchange,当消息格式为 XML 时,可以利用 Xquery 进行过滤

3支持 plugin,用户可以方便地增加新的功能,比如新的 exchange 类型

4提供了安全认证特性,任何 producer/consumer 需要和 broker 通信时,都需要提供身份认证,以便防止恶意的不相干的程序进入消息体系。QPID 的安全认证使用 SSL 协议。


4 .spring集成qpid实例

spring 提供spring-jms模块,用以集成JMSspring 容器中,并提供jmsTemplate模版类来操作jms

JMS 和QPID(2)——QPID_第2张图片

JMS 和QPID(2)——QPID_第3张图片

JMS 和QPID(2)——QPID_第4张图片

这里发送的时候,可以利用spring的消息转化器,它支持String TextMessage, byte[] BytesMesssage还有java.util.Map MapMessage的相互转化,例如下面

JMS 和QPID(2)——QPID_第5张图片


你可能感兴趣的:(javaweb)