APP下载

基于ActiveMQ的通用数据传输框架的设计与实现

2019-09-10陈瑶

现代信息科技 2019年10期
关键词:中间件

摘  要:本文主要论述了如何利用消息中间件ActiveMQ,构建一个通用的数据传输框架,以解决同步传输效率低下、数据传输不及时、数据传输不可靠、难以按优先级传输数据等难题,实现一个可跨平台、适用于各个异构分布式系统、屏蔽底层细节的数据传输框架的搭建。该框架在应用过程中提高了业务处理效率、降低了开发成本。

关键词:中间件;ActiveMQ;通用数据传输框架;民航气象数据传输

中图分类号:TP311.52      文献标识码:A 文章编号:2096-4706(2019)10-0026-03

Abstract:This paper mainly discusses how to use a Message-oriented middleware ActiveMQ to build a universal data transmission framework. The framework can solve the problems of low efficiency of synchronous transmission,untimely data transmission,unreliable data transmission,and difficulty in transmitting data according to priority. A cross-platform,heterogeneous distributed system,shielding the underlying details of the data transmission framework is implemented. The framework improves business processing efficiency and reduces development costs in the application process.

Keywords:message-oriented middleware;ActiveMQ;data transmission framework;civil aviation meteorological data transmission

0  引  言

民用航空气象服务与民用航空的安全和经济效益密切相关,随着民用航空的高速发展,对气象服务的要求越来越高。而气象数据种类多样、报文格式复杂、数据量大以及高时效性、准确度要求高[1]等因素给气象服务带来了更大的挑战。而现如今,越来越多的部门对民航气象数据有着迫切的需求。

在当前的业务条件下,民航气象数据传输给用户主要通过FTP的方式,FTP传输对于点对点数据传输有着方便易用等优点,却存在传输及时性不强、可靠性不足、无法配置优先级等缺点。

民航业务运行急需一个传输框架,既可以解决各部门中的分布式系统的异构问題,屏蔽操作系统的底层细节,又能保证各类数据异步传输、即到即转、满足数据时效精确到秒的要求,同时做到100%不丢数据,且能设置不同的优先级进行数据传输接收。

基于现实迫切的需求,构建了一个基于消息中间件的通用传输框架,该框架可异步传输数据,可跨平台使用,屏蔽底层细节,同时做到数据可靠传输,适用于所有需要传输数据的场合。该框架选用了基于JMS(Java领域的MOM规范)实现的中间件——ActiveMQ。

1  ActiveMQ介绍

ActiveMQ是目前最为流行和强大的开源消息中间件(MOM),由Apache软件基金会(ASF)出品。ActiveMQ是用于系统之间远程通信的消息代理器,它遵循JMS 1.1规范和J2EE 1.4规范中的JMS服务。ActiveMQ是用Java语言实现的,它也为多种语言提供了API,如Java、C、C++、C#、Ruby、Perl、Python和PHP等[2],还支持OpenWire、Stomp、REST、WS-Notification、XMPP和AMQP等多种应用连接协议。

在JMS规范中,消息类型有六种,分别是Message、TextMessage、MapMessage、BytesMessage、Stream-Message、ObjectMessage。在ActiveMQ中,还定义了新的消息类型——BlobMessage[3],可应用于发送大文件。

关于数据传输模型,ActiveMQ支持两种:点对点模型(Point To Point)和发布订阅模式(Publisher To Sub-scriber)。

第一种模型是点对点模型(Point To Point),这个模型的特点是一对一,在这个模型中,生产者首先封装数据生成消息,然后将消息发送至Queue,即队列中。Active MQ服务将根据传送策略,将该队列中的消息传输到向此队列注册的某一个消费者,一个消息只能传送一次、只能由一个消费者使用。但是,同一个队列允许一个至多个生产者向其发送消息。

第二种模型是发布订阅模型(Publisher To Sub-scriber),该模型的特点是一对多,即消息只需生产一次,就可提供个多个消费者即用户使用。在这个模型中,生产者封装消息发送到相应的Topic(目标主题),ActiveMQ会将消息发送给订阅了该主题的消费者。可以向Topic发送消息的生产者也是可以多个的。

发布订阅模型还支持持久订阅,如果消费者向Active-MQ的某个Topic提交持久订阅要求,即向该主题注册,注册后,ActiveMQ将保证该主题的消息能可靠地传输给该消费者。当消费者处于掉线状态,无法及时接收到消息,ActiveMQ将为其保存该消息,直至消息到期,或者消费者上线,正常接收到消息。未向Topic注册的消费者掉线时,ActiveMQ不会为其保存消息,即使消费者再次成功连接,之前的消息也将丢失。

ActiveMQ的主要特性有:

(1)遵循JMS1.1规范。ActiveMQ能够提供同步和异步的消息投递、一次且仅一次的消息投递以及消息订阅者的消息持久订阅等功能。

(2)支持多种连接协议和连接方式。ActiveMQ同时支持不同消息代理器之间的连接和消息代理器与客户端之间的连接。

(3)支持消息的持久存储。ActiveMQ能将消息持久化地存储到本地数据库,以保证消息的有效投递。

(4)具有安全认证和授权功能。ActiveMQ可以通过本地配置文件或者插件来实现客户端的安全认证和授权,以保证消息只能被授权用户生产和消费。

(5)其他高级特性。ActiveMQ还支持许多高级特性,包括消息代理器(broker)的集群、独享消费者、消息组和大文件消息等等。

2  基于ActiveMQ的通用数据传输框架设计与实现

2.1  架构设计

本框架分为业务逻辑层、控制层、传输层、数据交换层[4]、分布式系统等几个部分。为了实现全双工通信,保证数据即到即处理,本框架的实现中对数据的处理选用了异步的模式,在控制模块采用多线程的方式,在传输模块选用了Pub/Sub(发布者/订阅者)模型。

如图1所示,控制模块负责与业务逻辑对接,提供数据接口,相应业务按照指定格式,通过调用数据接口将要传输的数据发送给控制模块,控制模块根据配置文件,针对不同的业务逻辑进行数据的封装,由传输模块作为生产者将消息发送到指定的主题中。

而作为消息的消费者,传输模块持续监听指定主题,当主题中有最新的消息时,自动触发控制模块中的处理线程,将数据解封,调用对应控制模块中的处理线程,将数据提供给业务逻辑。

通过异步编程接口,传输框架向业务逻辑提供服务,统一编程接口,屏蔽数据传输细节。向下利用网络配置文件、ActiveMQ、基于事件的异步API等,连接各个分布式系统,为各个系统提供数据通信传输服务,降低了各个系统的耦合性[5]。该框架具有较高的并发处理效率,能很好地满足及时性处理要求。

在分布式系统中,接收端通过多线程、事件驱动的架构编码方式(Event-Driven Programming,简称EDP)及持久订阅等,降低数据传输的事件耦合性,降低代码间的耦合性,保证数据及时、可靠传输到用户。

2.2  系统实现

业务层的各类程序,可通过调用框架提供的接口,将要传输的数据告知传输框架,框架将这些数据并封装成JMS消息,发送到ActiveMQ的主题中,分布式系统如果已注册监听该主题,则主题收到消息后将触发接收端接收程序,数据发送到各个分布式系统。在此框架中,数据发送端为消息的生产者,接收端为消息的消费者。在系统中安装了本框架,即可同时成为数据的发送者和接收者。如图2所示。

2.2.1  消息控制模块设计

框架消息控制模块负责框架初始化、消息收发、消息路由、处理优先级控制、带宽控制等功能。根据业务划分不同的消息主题,代理线程根据配置文件中记录的主题队列、处理优先级、带宽等配置进行处理,代理線程运行在线程池中,将收到的消息路由到相应的业务逻辑中,业务逻辑进行接口调用后,主题线程根据配置文件,调用相应的模块,生成消息发送到对应的队列中。为了使配置便于扩展及解析,文件的格式选用了XML[6]。

2.2.2  异步API

异步API实现了事件驱动的消息应用架构,利用Pub/Sub(即发布/订阅模型),使得业务逻辑与数据传输形成一种松耦合的关系,从而达到异步处理。且对于多个需求相同的分布式系统,只需调用一次API即可达到数据的多个用户发送。

事件驱动消息应用架构驱动着业务处理流程,框架首先进行注册监听器来检监测消息事件。监测到消息事件后,代理线程从消息队列中获取消息,将消息封装成相应主题的主题事件,交由对应的子模块处理,子模块被主题事件触发,根据主题寻找配置文件信息,与相应业务逻辑进行交互。

通过异步API屏蔽了消息等待、消息重传、消息细节等信息,其他模块只需针对业务逻辑进行编程即可,降低了使用难度,提高了数据处理的及时性,避免了串行处理阻塞等待的低效率。

2.2.3  保证数据可靠传输

由于民航数据对于数据传输的可靠性要求很高,传输框架在发送端采用消息存储持久化的方式,保证接收端的分布式系统在离线或者网络不稳定的情况下,数据也可以万无一失地传输到各系统。为了降低风险,提高稳定性,传输框架未选用ActiveMQ内存对象方式保存消息,而是选用了KahaDB文件库实现消息持久化。并综合考虑服务器性能、数据量大小、频次等因素,测试性能瓶颈,制定消息持久化的保存时间。

代码如下:

publisher.setTimeToLive(1000*60*60*24); // 设置有效时间

publisher.setDeliveryMode(DeliveryMode.PER SISTENT); // 设置持久存储消息[7]

在分布式系统中的消费者采用持久订阅方式,他们分别向ActiveMQ注册一个识别自己身份的ID(如CSAIR),当此ID离线或网络不稳定时,传输框架会为这个ID保存所有发送到主题的消息,当分布式系统再次正常连接到ActiveMQ时,该ID离线时在ActiveMQ存储的所有消息将会被自动发送过去。传输框架和分布式系统中的消费者建立了应答机制,框架服务器在分布式系统中的消费者返回消息ACK标识后会更新消息的消费状态[8]。

2.2.4  事件驱动的消息应用架构

在传统的数据传输模型中,会采用定时轮询方式来检测数据文件是否到达,这样的模式会导致数据处理滞后,使得框架程序需占用资源、阻塞等待数据I/O,是低效的同步处理方式。本传输框架利用了事件驱动的架构编码方式(Event-Driven Programming,简称EDP),在传输层采用注册监听器的方式,当Topic中有新消息时,将马上调用相应的业务处理接口,配合异步编程接口,减少因随机因素造成的资源浪费,提高系统的性能和可伸缩性,同时保证数据到达后立即进行处理,符合民航数据时效性高的需求。

2.2.5  服务的持续性保证探究

由于ActiveMQ支持配置集群,可以采用此方式避免服务的中断。集群可以有效应对网络中断、服务器软硬件故障和电力中断等问题,与普通的备份方法相比较,集群方式使服务器切换对用户透明,从而提供持续的服务,同时也保证了数据的可靠性和不重复性。该方式在框架中的稳定性与可靠性正处于探究阶段。

2.2.6  框架测试

完成框架的開发和基本测试后,在民航气象业务系统中使用了该框架,并联合中国南方航空公司一起从功能、性能等方面对该框架进行了测试。测试结果表明该框架在数据可靠传输、网络安全、缩短数据流转时间、方便易用等方面有较好的效果。

3  结  论

该框架已应用于民航气象数据传输,这种基于消息队列的传输框架能够在提高民航气象数据传输能力的同时,保证民航气象数据安全、可靠的传输,缩短了民航气象数据与用户的信息交换时间,提升了经济效益。民航各部门中存在很多可靠性和时效性要求较高的实时数据传输、交换业务应用场景,该框架模型在这些方面将有一定的应用前景。

在保证服务的持续性方面,可采用ActiveMQ的集群配置,进一步优化现有框架,同时在高并发数据访问时,如何通过负载均衡保证ActiveMQ服务器的服务质量也是框架研究和改进方向之一[9]。

参考文献:

[1] 吕常胜,张宏伟.民航气象报文快速恢复系统的实现 [J].电脑知识与技术,2019,15(2):252-253.

[2] Snyder B,Bosanac D,Davies R. Introduction to Apache Active MQ Green Paper from Active MQ in action [M].London:Manning,2017:20-23.

[3] Snyder B,Davies R,Bosnanac D . ActiveMQ in action [J]. Manning,2011:4-5.

[4] 张炜.基于J2EE分布式架构的高性能电商交易接入平台研究与设计 [J].移动通信,2014,38(10):90-96.

[5] 冯云姣,吴斌,曾辉,等.基于Active MQ的任务集成管理系统设计与实现 [J].科技视界,2018(5):39-41.

[6] 戴俊,朱晓民.基于Active MQ的异步消息总线的设计与实现 [J].计算机系统应用,2010,19(8):254-257+215.

[7] 李刚.轻量级Java EE企业应用实战——Struts 2+Spring +Hibernate整合开发 [M].北京:电子工业出版社,2008:185-208.

[8] 周聪.基于改进的Active MQ的通信模型的设计和实现 [D].长春:吉林大学,2017.

[9] 庞佳丽.分布式系统中基于中间件的异步通信可靠性研究 [D].浙江:浙江工业大学,2017.

作者简介:陈瑶(1987.04-),女,汉族,湖南湘潭人,工程师,硕士,研究方向:数据传输框架。

猜你喜欢

中间件
我国自主可控中间件发展研究
中间件“迭代”
以实力证明 用事实说话
从边缘到主流国产中间件行了
中移动集采:东方通中间件脱颖而出
甲骨文携合作伙伴推融合中间件11g
国产中间件苦尽甘来
基于Web Services的安全中间件的优势及其设计与实现
金蝶 引领中间件2.0新时代
东方通 紧扣市场的中间件自主创新之路