当前,
CORBA
、
DCOM
、
RMI
等
RPC
中间件技术已广泛应用于各个领域。但是面对规模和复杂度都越来越高的分布式系统,这些技术也显示出其局限性:(
1
)同步通信:客户发出调用后,必须等待服务对象完成处理并返回结果后才能继续执行;(
2
)客户和服务对象的生命周期紧密耦合:客户进程和服务对象进程都必须正常运行;如果由于服务对象崩溃或者网络故障导致客户的请求不可达,客户会接收到异常;(
3
)点对点通信:客户的一次调用只发送给某个单独的目标对象。
面向消息的中间件(
Message Oriented Middleware
,
MOM
)
较好的解决了以上问题。发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收者。这种模式下,发送和接收是
异步的,发送者无需等待;二者的生命周期未必相同:发送消息的时候接收者不一定运行,接收消息的时候发送者也不一定运行;一对多通信:对于一个消息可以有
多个接收者。
已有的
MOM
系统包括
IBM
的
MQSeries
、
Microsoft
的
MSMQ
和
BEA
的
MessageQ
等。由于没有一个通用的标准,这些系统很难实现互操作和无缝连接。
Java Message Service
(
JMS
)是
SUN
提出的旨在统一各种
MOM
系统接口的规范,它包含点对点(
Point to Point
,
PTP
)和发布
/
订阅(
Publish/Subscribe
,
pub/sub
)两种消息模型,提供可靠消息传输、事务和消息过滤等机制。
1.JMS
JAVA
消息服务
(JMS)
定义了
Java
中访问消息中间件的接口。
JMS
只是接口,并没有给予实现,实现
JMS
接口的消息中间件称为
JMS Provider
,
iLink
实现了
JMS
接口,用户可以通过使用
JMS
接口,在
iLink
中进行
JMS
编程。
iLink
支持
JMS1.0.2
版本。
2.JMS
接口描述
JMS
支持两种消息类型
PTP
和
Pub/Sub
,分别称作:
PTP Domain
和
Pub/Sub Domain
,这两种接口都继承统一的
JMS
父接口。
3.JMS
消息模型
JMS
消息由以下几部分组成:消息头,属性,消息体。
消息头中定义好的标准属性外,
JMS
提供一种机制增加新属性到消息头中,这种新属性包含以下几种:
1.
应用需要用到的属性
;
2.
消息头中原有的一些可选属性
;
3. JMS Provider
需要用到的属性。
4.
消息的同步异步接收
消息的同步接收是指客户端主动去接收消息,
JMS
客户端可以采用
MessageConsumer
的
receive
方法去接收下一个消息。
消息的异步接收是指当消息到达时,主动通知客户端。
JMS
客户端可以通过注册一个实
现
MessageListener
接口的对象到
MessageConsumer
,这样,每当消息到达时,
JMS Provider
会调用
MessageListener
中的
onMessage
方法。
5. PTP
模型
PTP(Point-to-Point)
模型是基于队列的,发送方发消息到队列,接收方从队列接收消息,队列的存在使得消息的异步传输成为可能。和邮件系统中的邮箱一样,队列可以包含各种消息,
JMS Provider
提供工具管理队列的创建、删除。
JMS PTP
模型定义了客户端如何向队列发送消息,从队列接收消息,浏览队列中的消息。发布和订阅消息,这些节点被称作主题
(topic)
。主题可以被认为是消息的传输中介,发布者
(publisher)
发布消息到主题,订阅者
(subscribe)
从主题订阅消息。主题使得消息订阅者和消息发布者保持互相独立,不需要接触即可保证消息的传送。
面向消息的中间件(MOM)的代表JMS
最新推荐文章于 2023-05-29 22:07:14 发布