0

我第一次阅读 JMX,并试图看看它是否是解决我们在生产中遇到的问题的可行解决方案。

我们的架构不断访问远程 Web 服务(由不同团队在他们自己的服务器上管理)并从中请求数据(我们也从该服务缓存,但这是一个棘手的问题,缓存不是非常有效)。

我们希望能够在代码中的某个特定点动态打开/关闭日志记录,就在我们点击 Web 服务之前,我们可以在其中看到我们发送到服务的确切 URL/查询。如果我们只是盲目地设置日志级别并记录所有 Web 服务请求,我们将拥有天文数字般的大日志文件。

JMX 似乎是解决方案,我们在本节中使用托管 bean 控制日志记录,然后可以setLoggingEnabled(boolean)通过某个管理器(可能只是基本的 HTML 适配器)远程设置该 bean 的状态(等)。

我的问题都与部署有关:

  • 如果我编写 MBean 接口和实现,以及代理(将 MBean 和 HTML 适配器注册到平台 MBean 服务器),我是在我的主 Web 应用程序 (WAR) 中编译、打包和部署它们,还是它们有编译成自己的,比如 JAR 并坐在我的应用程序旁边的 JVM 上?
  • 我们有一个 Dev、QA、Demo 和 Prod 环境;是否可以有 1 个单一的 HTML 适配器指向一个 MBean 服务器,该服务器注册了不同的 MBean,每个环境 1 个?如果有一个 URL 可以访问您可以在不同环境中管理 bean 的位置,那就太好了
  • 如果我上面第一个问题的答案是 MBean 接口、impl 和代理都部署在您的应用程序中,那么是否可以将启用 JMX 的应用程序部署在一个服务器上(例如 Demo),但要从另一个服务器监视它服务器?

提前致谢!

4

2 回答 2

0

JMX是一种用于远程管理您的应用程序的技术,例如,当您想要更改配置而不重新启动时,这是最合适的用途。

但在你的情况下,我不明白你为什么需要 JMX。例如,如果您使用Log4j日志记录,您可以配置文件看门狗并将日志记录更改为可能的最低级别。即调试。这不需要重新启动,恕我直言,这本来应该是您最初的设计,即围绕记录器和级别工作。目前,尚不清楚您的意思是什么以及setLoggingEnable.

在任何情况下,托管 bean 都应该与您的应用程序一起部署,如果您使用的是 Spring,那么您很幸运,因为它提供了非常好的集成,JMX您可以将 Spring bean 部署为托管 bean。

最后,当您连接到您的进程时,您将看到为该 JVM 运行的托管 bean。所以我不确定你对第 2 点的确切含义。

无论如何,我希望这会有所帮助

于 2012-04-12T14:12:27.283 回答
0

如何打包 MBean 在很大程度上取决于可移植性。这些特定的服务在这个 webapp 的范围之外是否有任何实际的用途?如果不是,我将简单地声明您的 webapp “JMX Manageable”并构建它。否则,组件化 MBean,将它们放入 jar 中,将 jar 放入 WEB-INF/lib 并使用在您的配置中配置的启动 servlet 初始化它们网页.xml。

对于单个 HTML 适配器,是的,这是可能的。可以将其视为拥有 Dev、QA、Demo 和 Prod MBeanServer,然后是一个Master MBeanServer。您的 HTML 适配器应该呈现主。然后就可以使用OpenDMK 级联服务在 Master 中注册 Dev、QA、Demo 和 Prod 的级联。现在您将在 HTML 适配器显示中看到所有 5 个 MBeanServer 的 bean。

这能回答你的第三个问题吗?

于 2012-04-12T21:08:29.427 回答