APP下载

基于MQTT的乘客服务信息分发设计

2018-02-25杨耕田黄尊涛

铁路技术创新 2018年6期
关键词:队列消息指令

■ 杨耕田 黄尊涛

轨道交通已成为人们在日常生活中离不开的重要出行方式,轨道交通具有运量大、运行时间稳定、安全环保等众多优点,是整个交通体系的重要组成部分。乘客信息系统(Passenger Information System,PIS)作为轨道交通中为乘客提供丰富资讯的载体,可以提供列车运营信息、网络运营信息、政府公告、便民信息、广告以及在火灾等突发状况下的紧急疏散信息等。随着智慧出行理念的渐入人心,PIS必将承载更多信息的发布与传播,以便满足人们各种出行需求及对实时资讯的掌握。

1 PIS介绍和信息分发技术

1.1 PIS的功能

在正常情况下,PIS既可以提供列车运行时间、列车到站信息、换乘信息、车站周边信息等各种辅助人们出行的信息,也可以提供政府公告、新闻、广告等多媒体资讯的发布及推广;而在遇到火灾或其他灾害等紧急事件时,PIS还可以提供紧急疏散通告及提示信息等[1]。

(1)时间信息显示[2]。PIS能够实时地与时钟系统进行时间同步,以保证PIS时间的准确性,同时PIS的播控器还可以在屏幕上为乘客提供实时的系统时间显示,以便于乘客能够了解具体时间。

(2)列车运行时间、到站信息及换乘信息的显示。PIS可以通过与自动列车监控系统(Automatic Train Supervision,ATS)的对接获取线路上列车的实时运行情况,通过简单的处理即可以为乘客提供列车运行时间、到站信息及换乘信息等,这些信息都可以在播控器及相应的广播设备上提供给乘客,以便乘客可以更安全、快速地候车、换乘或出站。

(3)天气预报信息等各类生活资讯显示。PIS可以通过与天气服务器连接,将天气信息显示到播控器屏幕的指定区域上,给乘客的出行提供参考,另外PIS还可以在播控器屏幕上为乘客提供车站周边的景点及各种商场等信息。

(4)多媒体直播信息的显示。相关的直播信息经视频服务器处理后可以在播控器上进行实时播放,播放内容包括数字电视、实时新闻及重大赛事等。直播内容将以插播的形式打断正在进行的播放列表,以保证实时播放的及时性。

(5)广告、电视节目等多媒体信息的显示[3]。经过相关业务人员对录播的电视节目、宣传片、公益广告及商业广告等视频内容进行编播后,可以由相关人员将整个播放列表发送至播控器,此时播控器可按照编播的顺序依次播放相关内容,乘客即可通过播控器的视频播放获取相关资讯。播放列表中内容的播放优先级别较低,当有直播内容或者紧急信息时,都有可能打断列表中内容的正常播放。

(6)紧急信息的通告及提示[2]。当发生火灾或其他紧急事件时,PIS既可以使用预制的紧急信息,又可以即时编播更加准确的紧急信息进行通告,通告方式包括在播控器显示屏上滚动播放醒目的提示语、使用广播设备进行及时告警等,以此来实现对乘客的告警,帮助安全、快速地疏导人流。紧急信息内容的播放优先级具有最高等级,播控器将优先播放紧急信息内容。另外,紧急信息级别可分为紧急一级、紧急二级、紧急三级,其中紧急三级为最高等级。

1.2 PIS的结构和信息分发技术

PIS可以分为2个层级,即控制中心层和车站/车辆层(见图1)。其中,控制中心负责制定播放版式和播放列表内容,发布和解除运营信息,对相关设备进行监控等;车站/车辆层主要是由各种设备组成,负责控制中心下发信息的处理和播放[4-5]。车站/车辆层的可用于处理乘客服务信息的设备包含播控器、视频服务器、广播板卡、车载CCTV服务器、乘客报警器、接警终端、广播控制终端、摄像头、视频直播服务器、广播控制盒和车载广播主机等。

目前,现有的乘客服务信息分发技术很多是基于套接字(Socket)通信来实现,而Socket通信会存在以下不足之处:

(1)消息传输可靠性较消息队列遥测传输(Message Queuing Telemetry Transport,MQTT)协议差,可能会存在消息丢失的情况;

(2)当网络出现问题时,无法进行离线消息的缓存;

(3)对服务器压力较大,当连接终端数量较大时,很难横向扩展;

图1 PIS的层级结构

(4)会使得控制中心和播控器的耦合性高,不利于后期维护。

相较之下,MQTT作为控制中心和各个设备之间的通信协议,既能降低各个模块之间的耦合性,又能保证整个系统的稳定性,同时又具有高可用性、高扩展性,能够解决在网络不可靠的情况下出现的消息丢失问题和高并发情景下的性能瓶颈问题。

1.3 MQTT协议

MQTT协议是一种基于发布和订阅模式的“轻量级”通信协议(见图2)[6],是建立在TCP/IP协议之上的,其在移动互联网及物联网领域有着相当广泛的应用。

MQTT协议的实现需要2个主要角色,即客户端和服务器端,其中客户端又可分为发布者(Publish)和订阅者(Subscribe),服务器端又被称为代理(Broker)。MQTT传输的消息内容可以分为2部分:主题(Topic)和负载内容(Payload)。订阅者可以根据自身需求到服务器端订阅自己所关注的主题,这样可以保证在发布者发送相关主题消息时,服务器端可以及时地将对应的消息推送到订阅者端。

MQTT协议传输消息的服务质量(QoS)可分为3个等级[6]:

(1)QoS0最多分发1次,这一级别可能会发生消息丢失或重复情况,消息发布依赖于底层TCP/IP;

(2)QoS1至少到达1次,这一级别会确保消息到达,但消息可能会重复;

(3)QoS2仅分发1次,这一级别会确保消息只有1次到达,在一些要求比较严格的计费系统中,可以使用此类级别。

2 乘客服务信息分发流程设计

以控制中心下发运营信息到播控器为例,说明乘客服务信息通过MQTT进行分发的完整流程(见图3):

(1)上传订阅关系。控制中心和播控器在启动以后需与MQTT服务器建立长连接,并将相关的Topic订阅关系上传到MQTT服务器。

图2 MQTT协议

图3 控制中心下发运营信息到播控器的流程

(2)发送运营信息。控制中心组织需要下发的运营信息并生成相应的下发计划,在进行审核后将该下发计划发送到MQTT服务器端的消息队列。

(3)根据订阅关系推送。MQTT服务器根据播控器端的订阅关系将消息队列中的消息推送到指定的播控器。

(4)消息解析和处理。播控器在收到消息后进行解析,然后根据消息类型进行相应操作,如将运营信息显示到屏幕上。

(5)发送反馈消息。播控器在接收到MQTT消息后或在执行相应操作后,根据不同的业务指令可能存在不同的需求,封装1条针对此消息的结果反馈消息,并将反馈消息发回给MQTT服务器。

(6)推送反馈消息。MQTT服务器根据消息类型将反馈消息推送回控制中心。

(7)更新下发消息状态。控制中心将原下发消息的状态由“下发中”更新为“已下发”,并记录下发成功时间。

3 MQTT消息体设计

为了实现PIS中控制中心与车站/车辆设备端的点对点通信,将Topic定义为三级:一级Topic指定了消息的类型;二级Topic为固定字符串“p2p”,表示进行的是点对点通信;三级Topic为设备端的ClientId,由GroupId和DeviceId组成。

3.1 一级Topic定义

根据消息的通信方向,可以将MQTT消息分为2类:一类为控制中心下发给设备端的消息,另一类为设备端上报给控制中心的消息。其中,控制中心下发的消息根据内容可分为信息和指令2类;而设备端上报给控制中心的消息根据上报类型可以分为主动上报和结果反馈2类。一级Topic命名示例见图4。

一级Topic命名规则如下:第1部分为能力中心标识,此处表示该Topic为PIS能力中心所关注的Topic;第2部分为标识符,此处固定为“_Topic”;第3部分为通信方向,“SO”表示Server Originate,即控制中心下发给设备端的消息,“ST”表示Server Terminated,即设备端上报给控制中心的消息;第4部分为消息类型,若此消息为下行数据,则可分为信息类“INF”和指令类“CMD”,若此消息为上行数据,则可分为主动上报类“REPORT”和结果反馈类“RESULT”。

3.2 二级Topic定义

为兼容使用阿里云的MQ消息队列服务器发送MQTT消息的机制,设计中参照阿里云标准将二级Topic定义为固定字符串“p2p”,即“peer to peer”。

3.3 三级Topic定义

设备端的ClientId由GroupId和DeviceId组成,其中GroupId的命名规则为字符串“GID_”加上设备类型,如播控器的GroupId为“GID_PIPD”,设备端的DeviceId表示设备ID,由运营人员统一命名规则,在GroupId和DeviceId之间加上分隔符“@@@”即为ClientId。因此,每个设备监听的完整Topic都是与该设备的设备ID进行过绑定,这样即可达到MQTT消息点对点通信的目的。

对于QoS级别的选择,考虑PIS的乘客信息对于设备端是不可丢失的,但是信息重复又不会引起什么问题,另外由于阿里云的MQTT组件暂不能支持QoS2级别的消息,最终将QoS级别选定为QoS1。

负载内容为JSON格式,分为2层封装,第1层封装为通用字段,包括指令ID、设备ID、设备类型、指令名称和指令明细等,而具体的指令参数等会在指令明细字段进行第2层的封装。指令ID是由系统自动生成的、具有唯一性的字符串,主要作用是将控制中心下发的消息与设备端的结果反馈类消息进行一一对应;设备ID是由运营人员为每个设备分配的、具有唯一性的ID,主要用于区分各个设备;设备类型为各种设备类型的缩写,如“PIPD”表示播控器;指令名称主要用于区分该条MQTT消息的指令类型,如“ATS”表示该条消息为ATS类消息;指令明细字段用于具体参数的第2层封装,如“ATS”消息的具体内容会被封装为JSON字符串,然后赋值到指令明细字段。

图4 一级Topic命名示例

4 MQTT协议的优势

各种设备作为车站/车辆层的基础设备,是车站/车辆层PIS子系统的重要组成部分。作为控制中心和设备端之间的通信协议,MQTT协议具有如下优点:

(1)采用MQTT可以将控制中心级PIS与设备端之间的直接耦合减小;

(2)MQTT消息队列中间件可以为PIS分布式应用提供异步可靠的通信机制,提高应用的可扩展性、可用性和吞吐量,同时利用消息队列中间件的高可用性还可以保证数据的完整性和可靠性,以及解决PIS大量设备同时在线时信息可靠收发的问题;

(3)设备端可以预先在消息队列中间件订阅自己关注的消息主题,这样可以保证相关消息的及时推送以及设备及时地接收所关注的数据,也就保证了PIS消息收发的及时性。

5 MQTT服务器的搭建

对于MQTT服务器的使用共分为2个阶段:测试阶段和商用阶段。

在测试阶段中,采用开源的Mosquitto进行服务器搭建。目前各种平台上对于MQTT协议进行实现的代理有很多,其中Mosquitto是一个开源的轻量级的实现(C语言),而且比较完整的实现了MQTT V3.1协议中的消息推送基本功能[6],同时还能够完全兼容MQTT V3.1.1协议[7],可以提供轻量级的消息推送模式。另外,为了支持高并发的数据量,Mosquitto还能够通过桥接的方式进行集群的搭建,即1个主服务器,多个从服务器,这样当有大量消息需要进行收发处理时,就可以将请求分散到集群内的多台服务器上,降低单个服务器的负载,提高消息收发处理的高效性。

在商用阶段中,可以采用阿里云的LMQ消息队列等互联网中间件进行消息的可靠性传输,这些消息中间件同样支持分布式部署。

6 结束语

随着人们出行的智能化发展,作为公共交通重要组成部分的轨道交通出行方式更需要大量运用云计算、大数据、物联网等互联网技术使出行更加快捷方便,用技术创新满足人们对美好生活的向往。PIS需要分发的信息类型也将伴随着轨道交通的快速发展而变得更加多种多样,且在轨道交通运营过程中变得越来越重要。对于PIS信息分发的设计还可应用于轨道交通相关各种设备信息及其他信息的数据采集领域,通过对采集到的数据进行大数据分析处理后,即可更加有效地组织公共交通的运行计划安排,更加准确地进行相关资讯的传播,更加快速地处置突发状况,使人们的出行更加高效。

猜你喜欢

队列消息指令
听我指令:大催眠术
队列里的小秘密
基于多队列切换的SDN拥塞控制*
一张图看5G消息
在队列里
ARINC661显控指令快速验证方法
LED照明产品欧盟ErP指令要求解读
丰田加速驶入自动驾驶队列
消息
消息