如何获取消息?使用 JMS 技术作为数据复制的解决方案
2009-11-06 00:00:00 来源:WEB开发网跳出传统模式,JMS 解决方案允许以可靠的方式传送消息,即一旦确认已将消息传送到 JMS 服务器,就将它传送至寻址到的目的地(队列)。MQSeries 也不例外。一旦成功执行了将消息发送到服务器的代码,客户机就保证目的地最终会接收到消息,即使所讨论的服务器在处理过程中出现故障(如果目的地暂时不可用,或者 JMS 服务器死机等等)。请参阅下面清单 3 中的示例代码。下面代码中的类实际上负责一旦它确定需要发送文件,就执行数据的发送。
通过将消息配置为持久消息,我们可以保证一旦目的地(队列)接收到消息,那么消息将保留在那里直到它在该队列中被检索为止 ― 即使在系统有故障期间。因此,一旦安全地将消息传送到本地 JMS 服务器,就可以删除它了。不能过高估计克服系统故障的能力;对周期性系统故障的处理是开发分布式存档解决方案最重要的问题之一。客户现有系统上处理故障情况的代码很复杂很脆弱,而且对这些故障的处理和维护费用很高。通过一个健壮的、经测试成功的商业解决方案,JMS 使我们能解决所有这些问题。
>清单 3. 来自类 ar.jms.file.send.ConnectionElementpublic void sendMessage(byte[] payload, boolean persistent) throws
SendFailedException {
QueueSender sender = null;
try {
Message message = createMessage(payload);
sender = createSender
(persistent ? DeliveryMode.PERSISTENT : DeliveryMode.NON_PERSISTENT);
sender.send(message);
getClient().getLogService().logInfo(getName() +
" sent message " + message.getJMSMessageID() + ".");
} catch (JMSException exception) {
getClient().getLogService().logError
("JMS exception processing " + getName(),exception);
stop();
throw new SendFailedException("JMS Message Send Failed");
}
try {
sender.close();
} catch (JMSException ignore) {
getClient().getLogService().logInfo(getName() + " failed to
close sender. Processing will continue.");
}
}
更多精彩
赞助商链接