浅析开源ActiveMQ的特点及应用

2015-07-16 11:18:24郭小丹
山东工业技术 2015年18期
关键词:实例应用程序消息

郭小丹

(西藏民族大学 信息工程学院,陕西 咸阳 712082)

0 引言

在数据交换过程中,数据传输是非常重要的一个步骤,消息中间件是实现系统内部业务间的数据共享或者数据交换的基础,并且可以提供基于同步或者异步等多种数据通信模式,对系统的管理及后期的扩展具有重要的作用,综合分析,本论文中采用消息中间件完成信息的交互。

ActiveMQ 属于面向消息中间件的一种,开放源码,基于 Apache 2.0 licenced 的发布并且实现了 JMS1.1 规范[1],提供的企业级消息通信的可靠性、稳定性和安全性均较高,而且方便日后扩展。目前,ActiveMQ 已经被许多项目使用并且作为异步信息通信的核心。

1 ActiveMQ概述

ActiveMQ 旨在成为标准的、跨语言的以及跨平台的消息中间件。在遵循 JMS 规范的基础上还添加了一些其他特点,主要有 Java 管理扩展(Java Management Extensions,JMX 管理);信息组通信,负责将同一组信息发送给某个用户端进行处理;主从管理(Master/Salve),侧重于系统的可靠性,属于集群模式的一种,当系统的主代理发生故障,为了使得消息中间件继续正常运行,可让从代理代替主代理;有序信息管理,保证信息接收方有序接收并处理信息发送端发送的信息;延迟接收发送的信息,当信息发送方发送了信息后,信息接收方没有及时读取其信息,当信息接收方开启连接后,ActiveMQ会将之前未被信息接收方读取的信息推送给信息接收方;信息优先级,ActiveMQ按照信息优先级的高低按序处理和投递信息;消息持久化,通过设置将关键数据持久化到数据库中,当消息中间件挂了,可保留关键数据,不至于丢失重要数据等。

2 ActiveMQ 特性

ActiveMQ 遵循 JMS 规范,其特性是对 JMS1.1 规范的实现,具体有如下特性:

(1)是 Apache 默认的 JMS provider,完全支持 J2EE1.4 和 JMS1.1规范;

(2)支持 Spring,可以很容易的把 ActiveMQ 嵌入到 Spring 系统里,可以使用 Spring的各种特性例如 IOC、AOP 等;

(3)支持多种传输协议,使得 ActiveMQ 具有更好的灵活性,可提供不同的连接;

(4)支持消息持久化,提高了信息传输的可靠性;

(5)支持同步或者异步的消息传输模式;

(6)支持多语言的客户端,ActiveMQ 提供多种客户端 APIs,例如 Java、C/C++、PHP、.NET 等,虽然 ActiveMQ 运行于 Java 虚拟机上,但是其客户端能够选择多种被支持的其他语言,使得 ActiveMQ 的使用具有很好的广泛性[2];

(7)保证了高性能的集群,ActiveMQ 的多个 broker 可以同时工作,具有广泛的不同的部署拓扑结构,其拓扑结构如图1所示,Broker,消息中间者即就是消息提供者,Broker 可以在 activemq.xml 文件中进行配置,Store and Forward Network Federation,即消息路由分发系统,消息中间者 Broker 接收到消息后,会通过这个系统对消息进行存储和分发,因此 ActiveMQ 具有很好的可扩展性。

图1 ActiveMQ的拓扑结构图

3 开源ActiveMQ的应用

程序的耦合性表示至少两个以上的应用程序之间互相的依赖关系,用来度量软件结构内各模块之间的紧密度。模块间的紧密度越高,则其耦合性越强,说明模块间的独立性就越差。程序的耦合性主要由软件模块之间方法的调用方式、接口的复杂性等决定的。系统的耦合性对于分布式应用程序尤为重要。如果应用程序的某个模块发生变化时直接引起另外一个模块的改变,那么这些模块之间是紧耦合的;如果应用程序的某个模块的变化不会影响到其他模块,那么这些模块之间是松耦合的。

对于 CORBA、COM、EJB 和 DCE 等会使用远程过程调用(RPC,Remote ProceduralCalls)技术的属于紧耦合技术,使用该技术的情况下,调用者需阻塞直至被调用者运行结束返回反馈信息为止。目前有很多的应用程序使用 RPC 而且很成功,但是紧耦合的应用程序会出现因系统的小改动而影响整个系统、系统交互是阻塞式等显著的缺点。

松耦合应用程序不需要调用者进入阻塞状态,松耦合系统可以处理应用程序中的一些不可预见的变化。应用程序的信息发送方只需要将信息发送给ActiveMQ 而不需要考虑 ActiveMQ 何时以哪种方法将信息传输给信息接收方,信息接收方也不用考虑信息的来源和信息的传递方式。ActiveMQ作为消息的中间件,支持不同编程语言的客户端,也支持客户端间的不同通信协议,可以实现多语言的复杂系统间的异步通信。所以,ActiveMQ 是一种灵活性较好、为多语言的交叉程序提供松耦合的消息中间件。根据以上特性,可以在以下场景使用 ActiveMQ:(1)如果两个应用程序之间需要通信就可以考虑使用 ActiveMQ,无论这两个应用程序是在同一台主机上还是分布式的,ActiveMQ 支持消息的异步通信且能保证消息的成功投递。如果多个应用程序同时运行于同一台主机上,那么可以将 ActiveMQ 单独部署在另一台主机上,也可以将其内嵌在 Java 应用程序中。无论是订阅模式还是点对点模式都不需要阻塞等待反馈。如果多个应用程序是分布在多台机器上,可以使用单一 ActiveMQ 实例或者多 ActiveMQ 实例,单一 ActiveMQ 实例中的应用程序均与同一个 ActiveMQ 进行通信,ActiveMQ 能够单独运行在一台机器上,也能够与一些应用程序共同运行在同一台机器上;多ActiveMQ 实例中每个应用程序都会实例化一个 ActiveMQ,所有应用程序收发信息都是通过本地ActiveMQ 实现的,然后这些 ActiveMQ 实例协同工作,信息根据每个应用程序的需求通过若干 ActiveMQ 中间件被传输至信息的处理端;(2)适合于应用是由多种语言集成的环境,ActiveMQ 由 Java 编写,提供的客户端 API 有 Java、C/C++、PHP、Ruby、.NET 等,当需要集成多平台下的多语言应用时,可以考虑使用 ActiveMQ,不同语言的客户端间可以通过 ActiveMQ 实现通信;(3)RPC 的替代者,虽然使用 RPC 的客户端很多且很成功,例如 ATM、信用卡系统等,但是系统规模会因其同步请求要被阻塞而受限,异步通信则可以加快系统的请求处理;(4)应用间解耦,紧耦合系统尤其是在分布式环境下会存在一些问题,而松耦合系统的依赖性较小,对于未知变化的适应能力较高,系统的部分改变不会影响整个系统,同时系统应用间的交互也简单,提高了系统的负载能力和可用性。

4 结语

分析了ActiveMQ的功能和特点,并对它的几个特性进行总结,指出ActiveMQ配置的操作步骤,在此基础上从不同角度的需求得出相应的配置选择。ActiveMQ是一个优秀的开源软件,有丰富的配置选择,如何更好地利用 ActiveMQ成为进一步的研究目标。

[1]周城,葛斌,蒋林承.一种基于消息中间件的网页实时处理技术[J].电脑知识与技术,2011(10).

[2]http://blog.sina.com.cn/s/blot_616e189fO100ns4s.html

猜你喜欢
实例应用程序消息
一张图看5G消息
删除Win10中自带的应用程序
电脑报(2019年12期)2019-09-10 05:08:20
消息
中国卫生(2014年12期)2014-11-12 13:12:26
消息
中国卫生(2014年8期)2014-11-12 13:00:50
消息
中国卫生(2014年7期)2014-11-10 02:32:52
完形填空Ⅱ
完形填空Ⅰ
关闭应用程序更新提醒
电脑迷(2012年15期)2012-04-29 17:09:47
三星电子将开设应用程序下载商店
微软软件商店开始接受应用程序