Jakarta ee MDB与耐久性

Jakarta ee MDB与耐久性,jakarta-ee,jms,ejb,message-driven-bean,Jakarta Ee,Jms,Ejb,Message Driven Bean,为了保证持久性,部署MDB的应用程序服务器是否应该与JMS提供程序(服务器)分离,以便在应用程序服务器关闭后重新启动时,MDB可以发送在应用程序服务器关闭时丢失的消息?我会说是。一个选项可以是部署HornetQ standalone: 这样,您就不需要部署功能齐全的JBoss服务器,通过减少主机规格节省了一些资金。HornetQ在独立模式下的内存占用可能非常低 如果不选择拆分jms代理和MDB客户端,那么我以前的做法是在客户端中开发一个缓存来保存未发送的消息,因此,如果服务器关闭,它将存储消息

为了保证持久性,部署MDB的应用程序服务器是否应该与JMS提供程序(服务器)分离,以便在应用程序服务器关闭后重新启动时,MDB可以发送在应用程序服务器关闭时丢失的消息?

我会说是。一个选项可以是部署HornetQ standalone:

这样,您就不需要部署功能齐全的JBoss服务器,通过减少主机规格节省了一些资金。HornetQ在独立模式下的内存占用可能非常低


如果不选择拆分jms代理和MDB客户端,那么我以前的做法是在客户端中开发一个缓存来保存未发送的消息,因此,如果服务器关闭,它将存储消息,直到JBoss再次启动。

耐久性属性更适用于这样的情况,即客户机认为一切正常,因为服务器的主题已接受消息,但由于其中一个或多个收件人已关闭,因此实际上无法将消息传递给所有预期收件人


但是,如果服务器从未接受消息(因为它也关闭了),客户端就无法认为一切正常,因此不会神秘地错过任何消息

不过,更实际的是,耐久性属性确实假设多个远程客户端正在侦听一个主题。如果您的设置是这样的,您已经在不同的远程服务器上为一个主题设置了多个侦听器,那么我猜您不会问这个问题。因此,我假设您的MDB都部署在一台服务器上


在这种情况下,分离JMS提供程序可以提高您的健壮性,因为仅运行此提供程序的服务器可能具有较低的崩溃风险(更小、更专用的系统,尤其是没有您自己的代码=崩溃可能性更小),并且可以在您必须重新启动应用程序服务器的情况下充当缓冲区。另一方面,每台服务器都会增加至少一台服务器崩溃的可能性,并且在某个地方发生配置错误的可能性也会增加。这是一个你必须做出的权衡。

但是如果服务器从未接受消息(因为它也关闭了),客户端就不能认为一切正常,因此不会神秘地错过任何消息

不过,更实际的是,耐久性属性确实假设多个远程客户端正在侦听一个主题。如果您的设置是这样的,您已经在不同的远程服务器上为一个主题设置了多个侦听器,那么我猜您不会问这个问题。因此,我假设您的MDB都部署在一台服务器上


在这种情况下,分离JMS提供程序可以提高您的健壮性,因为仅运行此提供程序的服务器可能具有较低的崩溃风险(更小、更专用的系统,尤其是没有您自己的代码=崩溃可能性更小),并且可以在您必须重新启动应用程序服务器的情况下充当缓冲区。另一方面,每台服务器都会增加至少一台服务器崩溃的可能性,并且在某个地方发生配置错误的可能性也会增加。这是一个您必须自己做出的权衡。

在这种情况下,分离JMS提供程序可以提高您的健壮性,因为仅运行此提供程序的服务器可能会有较低的崩溃风险(更小更专用的系统,尤其是没有您自己的代码=崩溃可能性更小)并且可以在需要重新启动应用程序服务器的情况下充当缓冲区。另一方面,每台服务器都会增加至少一台服务器崩溃的可能性,并且在某个地方发生配置错误的可能性也会增加。这是你必须做出的一个权衡。