以前这个Blog的文章发布都是烧录到FeedBurner上,无奈现在FeedBurner已经被GFW大神彻底艹翻,一个个的Connection Reset只能逼我另作选择了。现在转投到了FeedSky,确实没有以前的爽,一篇文章发布半天了,FeedSky还没有抓到。
现在学乖了,不再用FeedSky提供的地址,还是用自己域名保险。毕竟是独立Blog,Blog在域名就不变,RSS也不会变。哪天FeedSky倒了,重新绑下域名就行。
新的Feed地址:
http://feed.2years.net
以前这个Blog的文章发布都是烧录到FeedBurner上,无奈现在FeedBurner已经被GFW大神彻底艹翻,一个个的Connection Reset只能逼我另作选择了。现在转投到了FeedSky,确实没有以前的爽,一篇文章发布半天了,FeedSky还没有抓到。
现在学乖了,不再用FeedSky提供的地址,还是用自己域名保险。毕竟是独立Blog,Blog在域名就不变,RSS也不会变。哪天FeedSky倒了,重新绑下域名就行。
新的Feed地址:
最近公司的一个基于Java的项目要进行监控和管理方面的改造,使用JMX基本是唯一的选择,这已经是标准了。但在构建监控管理系统时,还是遇到了相当多的问题,譬如在监控管理界面的打造上。
现在还真没有一个好用的支持JMX的通用监控管理界面解决方案,诸如Cacti、zenoss等只对JMX提供了很有限的支持,重心还是放在了SNMP监控上。而jManage这样的专精JMX的也相当老迈,被华丽Flash图表惯坏的我们也实在无法回头接受这样的Web1.0界面。说到底,通用意味着臃肿和低效,打造一个能随需求快速变化的专有系统或许是更好的选择。适应快速变化这一条,还用Java就基本做不到,所以我倾向于使用Python等动态语言打造这个界面。那么在这样的一个混搭系统之中,界面与JMX Agent之间的通信又是一个问题。
MX4J和JDMK等JMX实现提供了一系列符合JSR-160标准的Connector,但基于RMI和JMXMP的Connector只适用于纯Java系统内,而基于SOAP等WebService的又太过臃肿,但我发现了另一个好用的东东,即本文的主角:Jolokia(官方网站:http://www.jolokia.org)。Jolokia实现了将JMX Agent提供的服务以HTTP接口暴露出来,使用Json作为通讯格式,并且还做了一定的扩展,如支持批量操作等等。
要注意到的是,Jolokia是一个JMX-HTTP Bridge,即桥接器,而不是一个Connector。这就是说,现在不需要也不能像以前那样通过一段代码创建一个Connector并跟MBeanServer绑起来。那么要怎么使用Jolokia呢?这就引出了Jolokia的一大奇妙特性:完全非侵入性的设计。Jololia提供了一个war文件和一个jar包,如果要对现有的应用服务器或者Servlet容器如WebLogic、Tomcat、Jetty等加入JMX的HTTP协议支持,只需要部署这个war文件即可。而如果要扩展普通的Java程序,那么只需要在启动程序时加入一个参数,如-javaagent:/opt/library/jolokia-jvm-jdk6-0.80-agent.jar即可(要求JRE6,因为Jolokia用到了JRE6自带的HTTP服务器)。后者用到了javaagent机制,直接拦截了对MBeanServer的调用。
通过Jolokia,我们就可以对现有的所有支持JMX的Java程序都加入对HTTP和Json的支持,而且没有副作用。读取一个MBean的属性,就是调用一个如http://localhost:8080/jolokia/java.lang:type=Memory/HeapMemoryUsage/used的URL。除了Read,Jolokia也支持Write,Exec,List,Search操作,读写属性,调用操作,列出信息,该有的都有了。更详细的操作请查阅Jolokia的官方文档:http://www.jolokia.org/documentation.html。以HTTP格式发布JMX也带来的别的好处,如防火墙穿透性等等。
Jolokia还是一个快速发展的项目,现在作者十分活跃。不过现在Jolokia的文档还比较欠缺,我会继续带来别的教程。