我目前正在建立基于JMX的监视工具。要监视的系统已经以发布/订阅的方式公开了一些KPI,即自定义编码的监视客户端可以连接到系统,激活和订阅这些KPI,然后系统会在新的KPI值可用时立即通知客户端。由于对那些KPI的评估可能在计算上很昂贵,因此仅评估那些至少在已订阅客户端上具有的KPI。

现在,我的任务是扩展系统,以提供基于JMX和JMX通知的监视服务器,以便任何JMX客户端都可以激活,订阅和接收那些KPI。

我面临的问题是:每个连接的客户端都会更改服务器上的某些状态(即,激活KPI并注册一些侦听器),一旦客户端会话完成或由于连接断开而失败,我需要对其进行清理。

关于会话,第13.1章中的JMX specification状态:


  会话在客户端(尤其是其侦听器)上具有状态(请参见第13.4节“添加
  远程侦听器”(第208页)。会话不一定具有状态
  服务器,对于本规范定义的两个连接器,则不是。


有人知道JMXConnectorServer实现允许维持某些会话状态吗?实施此类服务器的任何代码示例,教程或指南也将受到高度赞赏。

最佳答案

也许您可以拥有诸如clientId之类的东西,在注册侦听器时,您将clientId作为参数,因此服务器将具有一些客户端信息。

当客户端轻轻关闭时,它可以调用JMX服务器的方法来清除侦听器,或者如果客户端失去连接并且无法轻轻关闭,则可以在客户端上创建一个监视线程来注册谁正在侦听和关闭,并在必要时通知JMX服务器。

关于java - JMX连接和 session 处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18460264/

10-12 00:25