java - 有没有办法使用 JMX 代码来捕获网络异常?

标签 java jmx

我对使用 JMX 监视/配置简单的 Java 客户端/服务器应用程序很感兴趣。例如,我们将捕获 Java 程序中发生的任何网络异常。

MBean 可以这样扩展吗?或者它们仅限于更具体的获取和设置功能?

到目前为止,我已经查看了 Notifications and Monitor MBeans

谢谢

最佳答案

好吧,我会说这绝对可行。我之前在 Apache Wicket 应用程序中使用 JMX 和自定义 MBean。无论如何,MBean 只是服务器应用程序中某些逻辑的包装器。因此,您可以直接从您的应用程序中获取数据。

如果你想举例说明这是如何在一个工作的应用程序中完成的,你可能想看看这个:

https://github.com/apache/wicket/blob/master/wicket-jmx/src/main/java/org/apache/wicket/jmx/wrapper/MarkupSettings.java

该类基本上持有对应用程序的引用,并直接从服务器应用程序请求数据。

当服务器启动时,它会通过一个初始化类注册所有的 MBean: https://github.com/apache/wicket/blob/master/wicket-jmx/src/main/java/org/apache/wicket/jmx/Initializer.java

然后,每次查看 MBean 服务器时,您都会看到直接来自应用程序的最新信息。

虽然有一些注意事项。需要注意的是,Java 通常不提供任何良好的抽象来捕获来自应用程序任何来源的给定类型的所有异常。您可以注册您的 catch-all 异常处理程序,但据我所知它不能完美地工作。

当我不得不做这样的事情时,我正在做的是使用 AspectJ 注册一个 all catch 位置来处理异常。我使用编译时编织来减少性能影响,但我不确定它对整体性能有多大影响(如果它有影响的话)。

¯\_(ツ)_/¯

另一个需要注意的是,JMX 连接通常很难在企业环境中设置。如果你必须通过两跳登录才能到达生产服务器,因为到处都有防火墙,那么你的监控连接肯定会失败,你需要继续向你的系统管理员购买啤酒并说服你的经理这不会强加任何安全措施风险。 :)

不过有一件事。你说

to monitor/configure a simple Java Client/Server application

您还想配置/监控客户端吗?我从来没有这样做过。我什至不确定这是否可能。

关于java - 有没有办法使用 JMX 代码来捕获网络异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36043178/

相关文章:

quartz-scheduler - 为什么在 Quartz 的 JMX 中禁用了 triggerJob?

java - 显示列表后如何删除方括号?

JavaFX HBox 隐藏项目

java - 有没有办法导出jconsole监控结果?

amazon-ec2 - 即使所有节点都已启动并正在运行,集群中的某些 cassandra 节点仍无法访问

java - 如何显示jmx MBean的类描述、属性描述和操作描述

java - 在 karaf 中,有没有办法通过 JMX 获取 bundle 的 spring 框架状态?

java - OpenJdk 初始启动时间很慢

java - Matlab 和 Java 集成

java - 单击两次时自定义 JComboBox 未关闭