本文将对
JMS API
作一个概述,并通过一个运行在
Weblogic
服务器上的
web
例程来介绍如何使用
JMS API
来异步处理(发送和接收)消息。
<o:p></o:p>
异步消息传递和面向服务架构
<o:p></o:p>
在现实中,大多数
web
请求都是同步处理的。例如,当用户要登入一个网站,首先输入用户名和密码,然后服务器验证登录合法性。如果验证成功,程序将允许该用户进入网站。这里,登录请求在从客户端接收以后被即时处理了。但是有些情况下不得不采用异步调用的方式,这个时候向消息队列发送一个消息,其中的请求是异步执行的,客户端可以立即就返回。
<o:p></o:p>
JMS<o:p></o:p>
如果您使用过
JMS
代码,您会发现它与
JDBC
或
JCA
很像。它所包含的样本代码创建或
JMS
资源对象回溯,使得每一次您需要写一个新类来发送和接收消息时,都具有更好的代码密集性和重复性。以下序列显示了传统
JMS
实现所包括的步骤:
<o:p></o:p>
1.
创建
JNDI
初始上下文(
context
)。
<o:p></o:p>
2.
从
JNDI
上下文获取一个队列连接工厂。
<o:p></o:p>
3.
从队列连接工厂中获取一个
Quene
。
<o:p></o:p>
4.
创建一个
Session
对象。
<o:p></o:p>
5.
创建一个发送者(
sender
)或接收者(
receiver
)对象。
<o:p></o:p>
6.
使用步骤
5
创建的发送者或接收者对象发送或接收消息。
<o:p></o:p>
7.
处理完消息后,关闭所有
JMS
资源。
<o:p></o:p>
您可以看到,步骤
6
是处理消息的唯一地方。其他步骤都只是管理与实际业务要求无关的
JMS
资源,但是开发人员必须编写并维护这些额外步骤的代码。
<o:p></o:p>
Spring JMS<o:p></o:p>
Spring
框架提供了一个模板机制来隐藏
Java APIs
的细节。
J2EE
开发人员可以使用
JDBCTemplate
和
JNDITemplate
类来分别访问后台数据库和
JEE
资源(数据源,连接池)。
JMS
也不例外。
Spring
提供
JMSTemplate
类,因此开发人员不用为一个
JMS
实现去编写样本代码。接下来是在开发
JMS
应用程序时
Spring
所具有一些的优势。
<o:p></o:p>
1.
提供
JMS
抽象
API
,简化了访问目标(队列或主题)和向指定目标发布消息时
JMS
的使用。
<o:p></o:p>
2.
JEE
开发人员不需要关心
JMS
不同版本(例如
JMS <st1:chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.0.2</st1:chsdate>
与
JMS 1.1
)之间的差异。
<o:p></o:p>
3.
开发人员不必专门处理
JMS
异常,因为
Spring
为所有
JMS
异常提供了一个未经检查的异常,并在
JMS
代码中重新抛出。
<o:p></o:p>
一旦您在
JMS
应用程序中开始使用
Spring
,您将会欣赏到它在处理异步消息传递上的简便。
Spring JMS
框架提供多种
Java
类,可以轻松实现
JMS
应用。
表面上看
Spring
获胜,代码少了很多。但是
Spirng JMS
的配置文件同样是很复杂。要配置
jndiTemplate
,
jndiTemplate
,
sendDestination
,
receiveDestination
,
jmsTemplate
等,这里就不列举了。
<o:p></o:p>