如何使用JMS实现分布式注册表?

时间:2015-10-26 16:29:08

标签: java-ee glassfish jms

只是为了明确上下文:

我已经在Java EE下实现了一个监控应用程序(使用GlassFish作为应用程序服务器),REST服务可以访问该应用程序以获取不同的信息。其中一个可检索信息应该是当前可用的最佳服务器(例如,在免费资源[CPU,RAM,存储空间......]方面)。

因此,我想通过JMS以分布式注册表的形式链接部署应用程序的所有服务器。目的是,在部署应用程序之后,服务器将动态地成为该注册表的一部分。最后,如果例如前一个最好的服务器负载很重,则会向其他服务器发送一条消息,通知他当前的状态(并更新注册表)。

在部署应用程序后,让服务器相互了解的最佳方式是什么? (固定的,独立的注册表,他们必须注册?)

有多少JMS提供商可行? 是否可以将多个/所有(应用程序)服务器设置为提供程序? 有没有办法在运行时将服务器设置为提供程序?

1 个答案:

答案 0 :(得分:1)

我建议确实围绕一个代理构建所有工作人员,或者如果您认为有必要,则建议配置一个高可用性的OpenMQ代理。除非您希望服务器上运行的其他JMS相关应用程序产生非常高的流量,否则这种情况应该是完全足够的,并且设置起来要容易得多。现在,默认情况下,Glassfish附带的OpenMQ代理将在也承载GF实例的JVM内部启动,但可以轻松更改。阅读有关三种支持的运行模式in the documentation的更多信息。在所谓的远程模式中,JMS代理在其自己的JVM中运行,并且您有责任停止并启动它,理想情况是在第一个工作程序启动之前。

那里有很多配置可能性,我建议你设置一个测试环境,并在不太理想的情况下测试它的性能和行为(例如,无论出于何种原因,经纪人死亡),以了解你对系统的期望。

最后但并非最不重要的是,在Glassfish中集成其他JMS代理相对容易(如here with ActiveMQ所示,但我的经验是OpenMQ是一个可靠,成熟,文档齐全的产品,因此它应该是你的第一选择。