一个大系统中,各内部模块系统之间的基于接口方式的互相调用和管理,使用jmx是最佳方案.
带来的好处是
1.面向接口,远程调用对于开发人员是透明的,模块在调用jmx接口时,与调用本地方法几乎相同.
2.可视化的管理界面,经过Jconsole等jmx客户端,能够实时监控系统,而且可实时调用方法进行某些操做.
典型应用场景:
某聊天系统,一台服务器做为 在线用户列表服务器 A1,n台服务器为用户提供聊天业务处理 N1 ,N2,N3...,
一台服务器做为后台管理系统A2.
系统管理员如今进行下面这样一个操做,察看某用户是否在线,找到该用户,发现其在线,则将该用户加入黑名单,并踢下线.
对应的jmx接口能够由如下几个:
A1为A2提供查询在线用户jmx接口,加入黑名单接口,kickout接口,
A1为N1..等服务器提供如下接口: 注册业务服务器,添加在线用户.查找黑名单用户
N1...到N3为A1提供kickout接口.
所以在上面的踢下线操做,则由用户在A2的web界面发出,交由A1执行,A1记录黑名单以后,再找到用户所在业务服务器调用N1提供的接口让用户下线.
以上情形是在生产环境下的部署,而在开发工做,则能够将A1,A2,N...N3等功能合并在一个应用中调试. 因为使用的是jmx接口,在本地调试合并以后,能够直接调用应用内部接口方法.
这样借助jmx实现的应用模块的灵活组装与拆分,使得系统的能够根据负载须要,根据性能状况,灵活的拆分和整合部署分布式的应用.
替代方案,选择webservice,xmlrpc等,可是这些都须要手工编写或用工具生成大量的代码来辅助完成接口间的java对象序列化 。
经典jmx案例:
1.
Jboss
使用jmx管理内部的各个service。
2. 基于java的开源网管软件Hyperic HQ ,经过jmx与各被管理资源进行通信和信息采集java
JMX是一个管理的框架。
当咱们想使用JMX的时候,就要问,咱们的系统当中有须要监控管理的资源或者对象吗?实事求是一点,咱们不能为了想使用一个高端的技术,就歪曲系统的原本面目。
若是第一个问题是确定的,接下来就是看这些资源是否有生命周期。
经典案例:jboss就是将全部可部署的组件做为资源来管理,这些组建都有其生命周期。这个理念甚至延伸到了其系统内部,将其内部的服务做为组件归入到JMX中来,成就了jboss基于jmx的微内核系统。 web