JMS生产者是否可以使用本地存储并在与JMS服务器断开连接时转发?

时间:2013-02-11 04:56:15

标签: java jms

我遇到的情况是,当客户端与JMS服务器断开连接时,我希望存储无法传递到JMS服务器的消息。我已经阅读了有关JMS提供程序的存储和转发功能的内容,但我还没有在客户端级别上看到有关此功能的任何讨论。是否有任何提供商在客户端实现中提供此功能?

我考虑过添加一个进程内JMS提供程序,它可以将消息存储并转发到JMS服务器。有哪些最轻量级的实施? HornetMQ,ActiveMQ?看起来这是一个非常小众的用例,并且可能有一个针对此场景的优化实现,它包装了另一个提供程序,并且比完整的嵌入式JMS提供程序更轻。

1 个答案:

答案 0 :(得分:1)

在客户端存储消息不是JMS标准功能,对于JMS服务器不可用的情况,您应该在客户端添加一些处理。为了减少发生这种情况的可能性,您可以在同一台计算机上运行JMS服务器,甚至可以在与客户端相同的JVM中运行JMS服务器。但是,连接丢失的可能性仍然很小,因此您仍然需要一些客户端处理代码。

您还需要一些东西,将来自本地JMS服务器的消息转发到应该接收消息的消息。一些消息传递系统确实具有关注此前导的特殊功能(例如SonicMQ的动态路由体系结构) - 也许您可以在ActiveMQ(http://activemq.apache.org/networks-of-brokers.html)中与代理网络达成相同的行为 - 否则您可以使用ESB实现,如Apache Camel。

关于消息传递实现,我不会坚持使用HornetQ,因为它将被ActiveMQ取代为JBoss标准消息传递提供者。