信息化 频道

政府网站的易用性始终是网民心中的“痛”

    用于浏览队列的QueueBrowser

   
JMS API中包括支持全面访问排队消息的工具。下面要讨论的工具是javax.jms.AueueBrowser接口及消息选择器(message selector)。QueueBrowser是一种可在给定队列中检索消息而不消费这些消息的接口。它可返回全部消息,在消息选择器的帮助下还可以返回全部消息的一个子集。

    另一种可供选择的队列管理方法是使用消极错误队列来存储失败消息,并使用QueueBrowser列出这些失败消息。然后可挑选出单个消息,对其进行重新发送、复制或删除操作。  

    下文是关于开发简单的处理失败消息的队列管理系统的分步说明:

    在config.xml文件中为目的地配置持久性错误队列。不需要为错误队列配置或编写任何消费者。

    使用QueueBrowser接口显示错误队列中的全部消息。对队列中消息的浏览非常简单,只需编写几行代码即可实现(见清单)。

    清单1:浏览队列内容

public Enumeration getQueuedMessages(
javax.jms.QueueSession qSession,
javax.jms.Queue queue)
throws javax.jms.JMSException
{
javax.jms.QueueBrowser browser =
qSession.createBrowser(queue);
return browser.getEnumeration();
}

    当用户选择了一条消息后,可使用消息ID作为消息选择器的参数标准来检索该消息(见清单2)。在检索消息后,用户可以很容易地将其重新交付至原始目的地甚至其他的消极队列,以便安全地保管该消息。还可以使用具有相同消息选择器参数的QueueReceiver来删除该消息(见清单3)。用户可在Sun J2EE API文档关于javax.jms.Message接口的部分中找到关于JMS消息选择器的详细介绍。  清单2:获得一个队列中的消息而无需消费它

public javax.jms.Message getMessageFromQueue(
javax.jms.QueueSession qSession,
javax.jms.Queue queue ,String messageId)
throws javax.jms.JMSException
{
javax.jms.QueueBrowser browser =
qSession.createBrowser(
queue, "JMSMessageID = '" + messageId + "'");

return
(javax.jms.Message)
browser.getEnumeration().nextElement();
}

    清单3:通过消费一个消息而从队列中删除它

public void deleteMessageFromQueue(
javax.jms.QueueConnection qConnection,
javax.jms.QueueSession qSession,
javax.jms.Queue queue, String messageId)
throws javax.jms.JMSException
{
javax.jms.QueueReceiver qReceiver =
qSession.createReceiver(
queue, "JMSMessageID = '" + messageId + "'");

qConnection.start();
qReceiver.receive(1000);
}

    在这种方法中,应用容器负责保存用户的消息,从而将用户从繁冗的工作中解放出来。因为一直都在使用JMS Message对象,所以还可免掉许多乏味的数据转换工作。

    为确保一切都达到非常好的状态,请不要忘记使用RedeliveryLimit和RedeliveryDelayOverride参数在config.xml文件中分别设置适当的重发限制与重发时延。

    除开发消息管理系统外,还应考虑构建合适的监控工具来监视目的地。虽然WebLogic控制台可提供所需的大部分统计数据,但仍存在许多原因使得用户应该通过自己的管理系统来获得这些数据――这样可使用户有更多的控制权,况且对生产系统控制台的访问通常会受到限制。

    Java管理扩展(Java Management Extensions,JMX)框架使得服务器统计数据的读取变得非常简单。通过使用JMX,用户可以始终了解服务器的内部运行情况,而JMS正是众多易于通过JMX进行监控的服务之一。

    使用JMX监控JMS目的地

   
WebLogic Server完全支持JMX,这意味着通过JMX可监控几乎全部的WebLogic功能。如果您还没有这样做过,那么打印一份您的服务器上的所有MBean(表示托管资源的JMX对象)的清单,您将惊奇地发现有如此丰富的信息可供使用。下面是一种非常好的办法:用一个单独的进程轮询所有最为关键的MBean,并将所得到的值与预定义的警告等级进行比较。  

    要检索JMS统计数据,首先需要获得希望监控的目的地的JMS MBean,比如weblogic.management.configuration.JMSQueueMBean和weblogic.management.runtime.JMSDestinationRuntimeMBean。这两个类包含若干用来从服务器中查找JMS统计数据的accessor方法。例如,只需指定一些内容,就可以获得目的地所接收的字节总数或当前排队的字节数。若要了解如何获得和使用MBean的详细信息,可查阅WebLogic文档。

    结束语

   
企业消息传递已经无处不在。无论您正在构建哪种服务,不久以后您就很可能需要在其他服务之间或者只是在集群内的进程之间共享数据。JMS是面向这种任务的事实上的行业标准。如果您还不能肯定它的所有优点,请参阅我在WLDJ 1月/2月版中的文章,题目为“Distributing Tasks in a Clustered Environment Using JMS”,您将了解到JMS远远不止是针对异步数据传输。该文章可在WLDJ网站中的Archives部分找到(Vol:4 Iss: 1)。

    无论以何种方式实现企业消息传递,都需要为应对复杂问题做好准备。如果对数据完整性有严格的要求,就请确保进行了适当的监控,并且具有经过认真斟酌的处理消息传递问题(如:消息处理失败)的策略。您可以很方便地获得合适的工具,而且它们都易于使用,因此,当遇到消息传递问题时就没有理由不做好准备了。
0
相关文章