[英]How to do JMX over JMS?
我需要增强分布式Java应用程序的JMX接口。 选择JMX的原因是公开数据的简单性。 这些分布式应用程序存在于连接到JMS服务器(activemq 5.7)(又连接到另一个JMS服务器以桥接2个网络,也就是activemq 5.7)的几台不同的计算机中。
我想做的是能够从JMS网络上的任何位置访问各个服务器上的远程JMX接口。 我将拥有完整的JMX访问权限,就像通过常规RMI界面进行访问一样。 这意味着每种动作。
我知道我可以使用lingo来使远程jmx接口与JMS服务器通信,并且从那里我的网桥应该允许我访问它们(假设其配置正确)。
这是一个好方法吗? 有人为此目的尝试过术语吗? 我可能还没有找到其他选择吗?
计划B可能是使用apache骆驼RMI模块,但似乎如果选择了lingo,则即插即用的功能远不止于此。
我认为这不是一个坏方法。 我想到的使用JMS的缺点之一就是对代理的依赖 ,而代理是大多数JMS实现所依赖的。
另一方面,它确实提供了一些有趣的功能,例如发现,异步JMX调用和pub / sub多播样式的JMX操作,您可以在其中发出一个操作请求并从所有MBeanServer接收回响应。
我不知道任何实际的实现,但是实现起来可能不太困难。 您只需要在每个目标JVM上配置一个客户机即可:
您还可以考虑实现完全成熟的javax.management.remote实现,该实现可以借助标准遵循而更平滑地集成到您的环境中。
我发现OpenDMK项目对于扩展/实现JMX服务器和客户端非常有用。 该库提供了使用“自定义”协议实现标准JMX远程处理解决方案的基本构建块。 基本上,您实现一个javax.management.remote.generic.MessageConnection ,它用作传输和调用机制。 所有JMX调用,响应和回调都被序列化为javax.management.remote.message.Message的实例,并且它们都是可序列化的,因此您将它们写入JMS ObjectMessage或从中读取它们应该没有任何问题。
您将从这种方法中获得的其他一些好处是:
如果您有兴趣,我在这里发布了OpenDMK的项目。
我正在使用netty为Java代理实现基本的JMX客户端,它可选地支持异步JMX请求。 响应是通过注册的侦听器传递的,就像“反向” MBeanServerConnection。 如果这很有用,请在此处查找源。
Jolokia(http://www.jolokia.org/)也是一个很棒的项目,用于使用REST和JSON远程访问JMX。 它会自动为您完成。 并支持批处理操作。 我建议看一看。
如果您使用JMX来获取AMQ统计信息,那么它将提供一个插件,因此您可以使用JMS消息传递来获取统计信息而不是JMX: http : //activemq.apache.org/statisticsplugin.html
从那时起,我将使用JMS来发现我感兴趣的服务器的URL,并使用纯JMX。 我没有看到通过JMS发送每个RMI调用的好处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.