gpt4 book ai didi

java - 如何在 JMS 上执行 JMX?

转载 作者:行者123 更新时间:2023-11-30 06:26:50 25 4
gpt4 key购买 nike

我需要增强分布式 Java 应用程序的 JMX 接口(interface)。选择 JMX 的原因是公开数据的简单性。这些分布式应用程序存在于连接到 JMS 服务器 (activemq 5.7) 的多台不同机器中(该服务器又连接到另一台 JMS 服务器以桥接 2 个网络,也是 activemq 5.7)。

我想做的是能够从 JMS 网络上的任何位置访问各个服务器上的远程 JMX 接口(interface)。我需要完整的 JMX 访问权限,就像通过通常的 RMI 接口(interface)访问一样。这意味着每一种行动。

我知道我可以使用 lingo使远程 jmx 接口(interface)与 JMS 服务器通信,我的网桥应该允许我从那里访问它们(假设其配置正确)。

这是一个好方法吗?有没有人为此尝试过行话?还有其他我可能没有找到的选择吗?

B 计划可能是使用 apache camel RMI 模块,但似乎如果行话是一个选项,它会比这更即插即用。

最佳答案

我认为这不是一个坏方法。我想到的使用 JMS 的一个缺点是 dependency on a broker ,大多数 JMS 实现都依赖于它。

另一方面,它确实提供了一些有趣的功能,例如发现、异步 JMX 调用和发布/订阅多播样式的 JMX 操作,您可以在其中发出一个操作请求并从所有 MBeanServer 接收回响应。

我不知道有任何实际实现,但实现起来可能不太困难。您只需要在每个目标 JVM 上配置一个客户端,它将:

  1. 监听 JMX 请求:监听器将解码请求(应该是 MBeanServerConnection 方法调用的编码)。使用公共(public)主题进行发布/订阅样式调用,返回编码结果到 JMSReplyTo 中指定的目的地请求消息中的属性。否则,您可以为每个 JVM 分配一个队列,或者为每个 JVM 选择一个唯一标识符并使​​用消息选择器。
  2. 如果你想实现 JMX 通知,你需要实现一个代理 NotificationListener注册所需的通知,并在收到通知后将它们转发到指定的 JMS 目的地。

您也可以考虑实现一个完整的 javax.management.remote由于遵守标准,可以更顺利地集成到您的环境中。

我找到了 OpenDMK项目对于扩展/实现 JMX 服务器和客户端非常有用。该库提供了使用“自定义”协议(protocol)实现标准 JMX 远程处理解决方案的基本构建 block 。基本上,你实现了一个 javax.management.remote.generic.MessageConnection它用作传输和调用机制。所有 JMX 调用、响应和回调都被序列化进入 javax.management.remote.message.Message, 的实例并且它们都是可序列化的,因此将它们写入 JMS 和从 JMS 读取它们应该没有任何问题 ObjectMessage

您将从这种方法中获得的一些额外好处是:

  1. 如果您正确配置了类路径,您应该能够使用任何标准 JMX 工具(例如 JConsole)连接到您的 JVM。
  2. OpenDMK 还提供联合 MBeanServer 的能力,这使您的所有 MBeanServer 实例都显示出来,并且可以通过一个中央 MBeanServer 进行访问。此功能需要标准的 JMX 远程处理实现。
  3. OpenDMK 还实现了一个有趣的服务发现协议(protocol),它有几种不同的风格,包括原始多播和“电话之家”方法,可以与您的 JMS 协议(protocol)很好地融合。

我发布了一个 OpenDMK 的 mavenised 项目 here如果你有兴趣。

我正在使用 netty 为 java 代理实现一个基本的 JMX 客户端,它可以选择支持异步 JMX 请求。响应通过注册的监听器传递,类似于“反向”MBeanServerConnection。如果这有用,请查找来源 here .

关于java - 如何在 JMS 上执行 JMX?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13950160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com