JMS

来源:互联网 发布:plsql导出sql乱码 编辑:程序博客网 时间:2024/06/07 10:10

JMS是java消息服务(java message service)应用程序接口,是一个java平台中关于面向消息中间件(MOM)的API,用于在两个程序之间,或者分布式系统中发送消息,进行异步通信,java消息服务是一个与具体平台无关的API。

绝大多MOM提供商都对JMS提供支持。

JMS是一种与厂商无关的API,用来访问消息收发系统消息,类似JDBC,JDBC是可以用来访问许多不同关系数据库的API,而JMS则提供同样与厂商无关的访问方法,以访问消息收发服务。

JMS有两种模型:点对点或队列模型   发布者/订阅者模型

1.点对点或队列模型:一个生产者向一个特定的队列发布消息,一个消费者从该队列中读取消息,这里,生产者知道消费者的队列,并直接将消息发送到消费者的队列,这种模式概括为:


只有一个消费者将会获得消息(一旦被消费,消息不在消息队列中了)。生产者不需要在接受者消费该消息期间处于运行状态,接收者也不需要在消息发送时,处于运行状态。二者没有依赖性,每一个成功处理的消息都由接受者签收。即接收者在成功接收消息之后需向队列应答。若需要发送的每个消息都能被成功处理,那么就要使用P2P。


2、发布者/订阅者模型

发布者/订阅者模型支持向一个特定的消息主题发布消息。0个多个订阅者可能对接收来自特定消息主题的消息感兴趣,这种模型下,发布者和订阅者彼此并不知道对方,这种模式好比是匿名公告板,这种模式概括为:

多个消费者可以获得消息

在发布者和订阅者之间存在时间依赖性,发布者需要建立一个订阅,以便客户能够订阅,订阅者必须保持持续的活动状态以接收消息,除非订阅者建立了持久的订阅(JMS允许订阅者创建一个可持久化的订阅,即使订阅者没有被激活,也能接收到发布者的消息)。在那种情况下,在订阅者未连接时发布的消息将在订阅者重新连接时重新发布。

当需要发送的消息可以不被做任何处理,或者被一个消费者处理,或者被多个消费者处理的话,可以采用这种模型。


3.消息的组合

(1)头

每条JMS消息都必须具有消息头,头字段包含用于路由和识别消息的值,可以通过多种方式来设置消息头的值。

a、由JMS提供者在生成或者传送消息的过程中自动设置

b、由生产者客户机通过在创建消息生产者时指定的设置进行设置

c、由生产者客户机逐一对各消息进行设置

(2)属性

消息包含称作属性的可选头字段,是以属性名和属性值成对形式,属性可以视为消息头的扩展,其中可以包含:创建数据的进程,数据的创建时间以及每条数据的结构,JMS提供者也可以添加影响消息处理的属性,例如是否应压缩消息或者如何在消息声明周期结束时废弃消息。

(3)主题

包含要发送给接收应用程序的内容,每个消息接口特定于它所支持的内容类型,JMS为不同类型的内容提供了他们各自的消息类型,但是所有消息都派生自Message接口。


StreamMessage   一种主体中包含Java基元值流的消息。其填充和读取均按顺序进行。
MapMessage    一种主体中包含一组键--值对的消息。没有定义条目顺序。
TextMessage       一种主体中包含Java字符串的消息(例如,XML消息)。
ObjectMessage    一种主体中包含序列化Java对象的消息。
BytesMessage     一种主体中包含连续字节流的消息。

0 0
原创粉丝点击