基于JMX的Mule ESB管理控制台
2012-04-29陈聪俞东进
陈聪 俞东进
摘要: 给出了一个符合JMX规范的Mule ESB管理控制台的设计和实现方案。借助了该控制台可以远程管理Mule ESB,查看Mule ESB服务器信息、Mule ESB及其服务的运行时状态和运行日志,也可以远程调用部署在Mule ESB上的服务方法。该控制台弥补了Mule ESB不提供远程管理的开源实现的不足。实验证实,该控制台运行稳定可靠。
关键词: 企业服务总线; 远程管理; Java管理扩展; 控制台
中图分类号:TP311文献标志码:A 文章编号:1006-8228(2012)03-25-03
Mule ESB console based on JMX
Chen Cong, Yu Dongjin
(School of Computer, Hangzhou Dianzi University, Hangzhou, Zhejiang 310018, China)
Abstract: Enterprise Service Bus (ESB) in service-oriented architecture acts as intelligent integration and management agency between services. Mule ESB is a famous open source implementation of ESB. It is a lightweight messaging and integration platform implemented in Java. The authors presents in this article the design and implementation of a JMX-compliant Mule ESB management console. The console could remotely manage the Mule ESB server and display server information about Mule ESB deployments and its run-time status. It could call remotely Mule ESB and its services. The console could overcome the deficiency of open source implementation of Mule ESB. It runs steadily as the experiment shows.
Key words: Enterprise Service Bus; remote management; Java Management Extensions (JMX); console
0 引言
随着信息化技术的快速发展、企业规模的不断扩大,企业应用系统在逐渐增多,同时复杂性也在不断增加。由于种种原因,如这些系统可能由不同的软件厂商开发实施,各系统只关注各自领域内的数据与业务处理,因此相互之间无法进行信息共享和业务集成,形成了许多“信息孤岛”,为此,很多企业迫切需要一种集成方法,以将各种旧的应用系统和新的应用系统集成起来。
面向服务架构(Service-Oriented Architecture,SOA)继承和发展了传统体系结构,它能够混合搭配多种执行环境、使服务接口和执行技术分离,从而使得IT部门可以为各项工作选择最佳的执行环境,并采用一致的架构将它们结合在一起[1]。SOA架构的驱动力是集成、复用与协同。它可以使用户不受限制地重复使用软件,把各种资源互连起来。只要IT人员选用标准接口包装旧的应用程序,把新的应用程序构建成服务,那么其他应用系统就可以很方便地使用这些功能服务[2]。
为了更有效地管理和重用系统服务,企业服务总线(Enterprise Service Bus,ESB)被引入到SOA实践中。企业服务总线在SOA中充当服务间智能化的集成与管理中介[3],是基于面向服务架构的基础设施,是传统中间件技术与XML、Web服务等技术结合的产物。第三方的程序组件能够以标准的方式“插入”到企业服务总线上运行,参与应用集成的各方并不直接交互(请求者无须了解服务提供者的物理实现),而由总线负责将请求交付给提供所需功能和QoS的服务提供者。这样,服务请求者和服务提供者的应用程序逻辑就可以使用各种编程模型和技术调用或交付服务,而无需考虑是直接连接还是通过企业服务总线传递的[4,5]。
Mule(www.mulesoft.org)是企业服务总线的一个最优秀的开源实现之一。它是一个以Java为核心的轻量级的消息框架和整合平台,允许开发人员快速便利地连接多个应用,并支持应用间的数据交换。它支持集成现有系统而无论其底层采用何种技术,如JMS、Web Services、JDBC、HTTP以及其他技术。Mule通过Transports/Connectors与外围的异构系统连接,提供Routing(路由)、Transaction Management(事务管理)、Transformation(转换)、Message Broker(消息代理)、Transportation Management(传输管理)、Security(安全)等核心模块。外围系统的服务请求通过Mule ESB的Transport接入,Mule ESB通过Transformer进行数据的格式转换,然后经过Inbound Router进行消息过滤(内部通过配置filter实现)后交给Mule的Component等进行业务逻辑处理。处理后的结果通过Outbound Router确定传递给哪个接收方,然后通过Transformer进行数据格式转换,再通过Transport连接至接收方。Mule ESB可以单独使用,也可以架设在常用的应用服务器上。
企业一旦在生产环境中部署了Mule ESB,那么对于Mule ESB和相关服务的管理和监控就变得至关重要。随着越来越多的应用、服务部署在Mule ESB上,系统的复杂度会不断提高,因此企业对于监控系统性能和控制系统的需求也随之而来。ESB的管理控制台,就是一款能提供一个非常方便的界面来帮助用户管理和监控ESB以及相关的各种服务的软件。然而令人非常遗憾的是,Mule ESB没有提供相应免费的管理控制台软件。
Java扩展管理(Java Management Extensions,JMX)是由Sun公司提出的、面向应用程序、设备和系统的集成化管理框架[6]。Mule ESB内嵌了对JMX的支持,因此利用JMX API可以方便地对Mule ESB进行远程监控。
对于利用JMX实现分布式系统的实时监控已有不少的研究。例如,Haihua Jiang等人[7],以及Abdelkader Lahmadi等人[8]都提出了采用JMX架构实时监控分布式应用系统性能的方法。本文给出了基于JMX的Mule ESB管理控制台的设计和实现方案,实验证明该方案是合理和可行的。
1 管理控制台架构设计
本文开发的企业服务总线控制台针对Mule ESB开发。由于Mule ESB已经实现了JMX内核架构,因此我们只需要部署一个JMX代理应用到Mule ESB的项目中,就可以通过开发JMX代理客户端来监控和控制Mule ESB的某些行为。另外,为了可以在管理控制台方便地查阅Mule ESB的日志信息,需要改写Mule ESB的日志行为,并将其运行日志存储到指定的数据库中。
根据MVC分层思想,管理控制台分为视图层、控制层和模型层三层。其中,视图层是展示和操作的用户接口;控制层负责信息的转发;模型层可以进一步分为两部分:第一部分是JMX代理客户端模型,该模型通过远程调用Mule ESB的JMX内核实现,用以规格化JMX的MBean,第二部分通过访问数据库获得Mule ESB的日志信息。
管理控制台的体系结构如图1所示。
图1管理控制台分层结构
⑴ 视图层:整个页面框架使用EXT JS富客户端框架技术搭建,所有的页面内容都通过异步的方式加载。
⑵ 控制层:使用Apache的Struts 2技术将请求映射根据业务的需求分类。该层是视图和模型的适配中介,可将模型与具体的业务结合起来。
⑶ 模型层:可以分为数据库模型和JMX代理客户端模型两大类。
● 数据库模型:主要负责从日志数据库获取数据,使用Mybatis 3来实现对数据库的操作。
● JMX代理客户端模型:提供了对Mule ESB服务实时信息的获取和对Mule ESB服务操作的调用功能。
2 JMX代理客户端设计
JMX代理客户端模型如图2所示。
图2JMX代理客户端模型
其中,ProxyClient用于连接并与Mule ESB交互。ProxyFactory用于创建ProxyClient对象,并维护该对象的单例。ServiceContext为规格化后可对Mule ESB进行重启和关闭操作的上下文对象。Service则是规格化的Mule ESB服务,具体的Service,如Connector、Configuration、Context等,可根据是否带操作规格化为BeanModel和OperationalBean两类,其中OperationalBean是BeanModel的扩展。BeanModel中可以实时获取Mule ESB对应模块的状态数据,而OperationalBean在获取状态数据的同时还能调用Mule的部分操作,用以控制Mule的行为。
为了加快客户端的响应速度,可对Mule ESB的CPU、内存使用率等预先进行缓存处理,即根据配置的刷新频率和缓存的列表长度,定时向Mule ESB请求数据,并刷新缓存列表。相应的实现步骤为:
⑴ 读取配置文件,即读取配置的Mule ESB的代理地址,拦截信息及缓存信息等。这些内容由统一的工厂类PropertiesFactory加载,并保持单例。
⑵ ProxyClient根据代理地址连接到Mule,并创建缓存,其中ProxyClient由ProxyFactory来统一创建和维护。代码如下。
public static ProxyClient getProxyClient() {
initProxyClient();
connect();
return PC;
}
其中initProxyClient方法保证了其对象的单例,即只有在对象未实例化时才会进行实例化,否则直接返回已实例化的对象。而connect方法则只有在连接已经中断的情况下才会重新发起连接,否则只刷新数据。
⑶访问时,系统动态地创建ServiceContext或者Service,通过ServiceContext提供的方法或者Service创建的模型来和Mule进行交互。
ServiceContext为整个Mule ESB的上下文,目前只提供了重启(restart)和关闭(close)两个方法。Service则提供了一组模型化的服务模块接口,可以通过这些接口来获取每个服务的各个子模块,代码如下。
public String getServieName();
public BeanModel getConfiguration();
public List
public List
public List
public List
public OperationalBean getContext();
public List
public OperationalBean getWapperManager();
所有的模块分为带操作的模块和不带操作的模块。不带操作的模块,只提供了所有属性名和实时属性的值的获取功能。其接口定义见如下代码。
public interface BeanModel {
public String getBeanName();
public List
public Object getValue(String property);
}
而带操作的模块,则不仅可以获取到属性的名和其值,还能通过操作接口进行操作调用。其接口定义见如下代码。
public interface OperationalBean extends BeanModel {
public List
public List
public Object invoke(String operationName, List<
Parameter> params) throws Exception;
}
3 结果和分析
基于JMX的Mule ESB控制台可分为五个部分:服务器状态实时展示、项目应用的展示和调用、服务调用日志的查询、ESB历史日志的查询、ESB状态的查看和ESB的管理(重启和关闭)。
图3项目应用的展示和调用
图3为项目应用的展示和调用界面。界面左边呈树状显示,点击某具体模块时,在左边上部区域中展示其实时属性及属性值,下部区域中展示可供调用的方法,以及调用方法的操作按钮。
ESB状态图展示了ESB中各服务中数据结点的实时调用情况(图4)。控制台默认每10秒刷新访问数据。
图4Mule ESB实时运行状态查看
4 结束语
本文描述了一种远程监控和管理Mule ESB的解决方案。该解决方案采用JMX方式进行连接和操作Mule ESB。作为Java的标准,API,JMX具有跨平台的优势,而且其性能及其稳定性都能得到保证。
该控制台还存在一些问题有待解决,例如,如何提高客户端的体验效果,如何用更直观的方式展示Mule ESB的状态变化,如何采用更为直接和方便的方式提供模块方法调用等等。
参考文献:
[1] Papazoglou MP, van den Heuvel WJ. Service oriented
architectures: Approaches, technologies and research issues [J].The VLDB Journal, the Int'l Journal on Very Large Data Bases, 2007, 16(3):389-415.
[2] 喻坚,韩燕波.面向服务的计算—原理和应用[M].清华大学出版,
2006.
[3] 周晓艳.企业服务总线(ESB)在SOA中的应用研究[D].大连海事大
学,2009.
[4] Schmidt Marc-Thomas, Hutchison Beth, Lambros Peter, etc. The
enterprise service bus: Making service-oriented architecture real [J], IBM Systems Journal, 2005.44(4):781~797
[5] 曾文英, 赵跃龙, 齐德昱. ESB原理、构架、实现及应用[J]. 计算机工
程与应用,2008.25.
[6] Java Management Extensions (JMX) Technology [EB/OL], http://
www.oracle.com/technetwork/java/javase/tech/javamanagement-140525.html
[7] Haihua Jiang, Hai Lv, Nan Wang and Rihua Di. A Performance
Monitoring Solution for Distributed Application System Based on JMX[A]. Proc. Of 2010 Ninth International Conference on Grid and Cloud Computing, 2010.pp:124~127
[8] Abdelkader Lahmadi, Laurent Andrey and Olivier Festor.
Performance of Network and Service Monitoring Frameworks [C]. Proc. of 2009 IFIP/IEEE International Symposium on Integrated Network Management, 2009.pp:815~820