为了使耐久性有意义,部署MDB的应用服务器是否应与JMS提供程序(服务器)分离,以便在应用服务器关闭并稍后重新启动时,可以向MDB发送消息应用程序服务器关闭时它错过了什么?
答案 0 :(得分:2)
但是如果服务器从未接受过该消息(因为它也已经关闭),那么客户端就不会认为一切正常,所以不会错过任何消息。
更实际的是,持久性属性确实假设多个远程客户端正在监听的单个主题。如果你的设置是这样的,你已经在一个主题的不同远程服务器上有多个监听器,我想你不会问这个问题。所以我假设您将MDB全部部署在一台服务器上。
在这种情况下,分离JMS提供程序可以提高您的健壮性,因为仅运行此提供程序的服务器可能具有较低的崩溃风险(更小的更专用的系统,尤其是没有您自己的代码=更不可能崩溃)并且可以运行作为必须重新启动应用程序服务器的情况的缓冲区。另一方面,对于每个服务器,您添加了至少其中一个崩溃增加的可能性以及您在某处产生配置错误的可能性也会增加。这是你必须做出自己的权衡。
答案 1 :(得分:0)
我会说是的。一种选择可能是部署HornetQ:
http://docs.jboss.org/hornetq/2.2.5.Final/user-manual/en/html/architecture.html#d0e636
这样您就不需要部署功能齐全的JBoss服务器,通过减少主机规格来节省一些资金。 HornetQ在独立模式下的内存占用率可能非常低。
如果拆分jms代理和MDB客户端不是一个选项,我曾经这样做的方式是在客户端开发一个缓存未发送消息的缓存,这样如果服务器关闭,它会存储消息,直到JBoss再次启动。 / p>
答案 2 :(得分:0)
持久性属性更适用于客户端认为一切正常的情况,因为服务器的主题已接受消息,但实际上无法将其传递给所有预期的接收者,因为其中一个或多个已关闭。
但是如果服务器从未接受过该消息(因为它也已经关闭),那么客户端就不会认为一切正常,所以不会错过任何消息。
更实际的是,持久性属性确实假设多个远程客户端正在监听的单个主题。如果你的设置是这样的,你已经在一个主题的不同远程服务器上有多个监听器,我想你不会问这个问题。所以我假设您将MDB全部部署在一台服务器上。
在这种情况下,分离JMS提供程序可以提高您的健壮性,因为仅运行此提供程序的服务器可能具有较低的崩溃风险(更小的更专用的系统,尤其是没有您自己的代码=更不可能崩溃)并且可以运行作为必须重新启动应用程序服务器的情况的缓冲区。另一方面,对于每个服务器,您添加了至少其中一个崩溃增加的可能性以及您在某处产生配置错误的可能性也会增加。这是你必须做出自己的权衡。