一种支撑互联网问诊服务的集群式即时消息系统及其实现方法转让专利
申请号 : CN202010004667.4
文献号 : CN111211971B
文献日 : 2021-11-05
发明人 : 杨帆
申请人 : 西安新能技术有限公司 , 杨帆
摘要 :
权利要求 :
1.一种支撑互联网问诊服务的集群式即时消息实现的方法,其特征在于,包括:通过客户端进行消息节点注册,通过SocketIO服务节点的注册请求,生成临时的、动态的令牌,由SocketIO服务端对客户端拿到的临时令牌进行令牌有效性的控制;
发送方通过消息节点通讯将消息发送到SocketIO服务节点时,SocketIO服务节点会对消息的类型进行遍历,建立观察者模式,通过图文消息监听对象,实现与图像存储系统的对接;通过视频消息监听对象,实现与视频服务系统的对接;通过健康档案消息监听对象,实现与EHR系统对接;通过处方消息监听对象,实现与HIS系统对象;
接收方不在发送方SocketIO消息节点会话内,将在SocketIO消息节点集群广播,如果接收方不在自己的会话内就丢弃,如果接收方在会话内找到就进行SocketIO服务节点与业务节点之间的消息通知、业务交互、结果封装及结果消息发送接收端;
所述HIS系统为医院信息管理系统,所述EHR系统为电子健康档案系统。
2.根据权利要求1所述支撑互联网问诊服务的集群式即时消息实现的方法,其特征在于,所述通过客户端进行消息节点注册的包括如下步骤:S10:客户端注册初始化,向注册请求代理服务发送注册请求;
S20:注册请求代理服务接收客户端的注册请求;
S21:注册请求代理服务将新的客户端均衡分配到SocketIO服务节点;
S30:SocketIO服务节点进行会话注册;
S31:若注册失败,返回步骤S20注册请求代理服务,注册请求代理会将错误原路返回给客户端;
S32:若注册成功,SocketIO服务节点为客户端创建身份令牌,并通过HTTP协议最终回应给客户端;
S40:客户端获取到注册成功的令牌,注册完成。
3.根据权利要求2所述支撑互联网问诊服务的集群式即时消息实现的方法,其特征在于,所述通过客户端进行消息节点注册的具体包括如下步骤:S10:客户端注册初始化
客户端要进行即时消息通讯,需要进行服务节点的注册初始化;注册初始化的流程中客户端通过HTTP协议之上的WebSocket协议,通过向注册代理服务发送注册请求,建立与SocketIO服务节点的连接资源;
S20:注册请求代理服务接收客户端的注册请求,并且进行SocketIO动态分配;
代理服务是一个基于HTTP协议的反向代理服务器组成,其中,Nginx服务可以有效的作为高性能反向代理服务,通过这种两级注册模式,实现一级代理作为客户端请求入口,实现SocketIO集群的调度,SocketIO做为二级集群,提供数百台注册服务子节点的负载;
S21:Nginx服务进行代理的过程是通过负载均衡的分配方式,负载均衡算法是根据Nginx服务提供的最少连接数算法进行均衡负载,优先给连接数最少的SocketIO服务节点注册新的客户端连接;
S30:SocketIO服务节点是以Netty‑SocketIO开源组件为基础,提供了TCP/IP长连接之间的数据通讯;
SocketIO服务节点会话注册步骤:(a)SocketIO服务节点获取注册代理节点发来的客户端注册请求,(b)SocketIO对服务节点的身份证书进行数据库身份鉴权,所述身份鉴权数据会缓存在Redis内存数据库中;
S31:若注册失败返回步骤S20注册请求代理服务,注册请求代理会将错误原路返回给客户端;
S32:若注册成功,SocketIO服务节点为客户端创建身份令牌,作为下次访问的身份授权证书,通过HTTP协议最终回应给客户端;
S40:客户端获取到注册成功的令牌消息后,将令牌保存在自己的本地临时数据库中,当下次进行消息发送的时候,会将令牌和消息一并发送。
4.根据权利要求2或3所述支撑互联网问诊服务的集群式即时消息实现的方法,其特征在于:步骤S40中,所述令牌有过期时间,若令牌超过过期时间后,客户端需要重新注册申请。
5.根据权利要求1所述支撑互联网问诊服务的集群式即时消息实现的方法,其特征在于,消息发送过程中,包括如下步骤:
100:客户端作为发送端,开始健康档案的编号发送;
200:SocketIO注册节点获取到客户端发来的消息;
201:根据200SocketIO注册节点获取的健康档案编号进行医院EHR系统编号查询;
202:对健康档案中患者索引信息、医院EHR透传所需信息进行数据封装;
203:SocketIO服务节点完成对健康档案数据的封装后进行发送准备,并确认在本SocketIO服务节点的注册列表中是否存在接收方客户端;
204:如果确认本SocketIO服务节点的注册列表中有接收方客户端,则将封装后的健康档案数据向接收方客户端直接进行数据传输;
300:接收方客户端接收到健康档案数据,并对健康档案数据进行解析,链接到700:接收方客户端所属的系统中,由EHR系统查询详细信息,并返回给接收方客户端进行详情展示;
205:如果确认本SocketIO服务节点的注册列表中没有接收方客户端,则SocketIO需要进行MQ消息服务中心的通知,SocketIO服务节点从本地获取MQ消息服务中心客户端对象,并将封装好的健康档案Json数据通过MQ消息服务中心对象,向MQ消息服务中心进行数据推送,直到完成;
400:由上205向MQ消息服务中心进行数据推送完成后,MQ消息服务接收到SocketIO推送来的发送方客户端健康档案数据,并加入到通道队列中;MQ消息服务中心不参与业务逻辑的路由转发工作,无差别地对订阅在该消息服务中心的所有SocketIO消息服务节点(推送节点除外),进行健康档案消息广播;
500:每个订阅MQ消息服务中心健康档案通道的SocketIO消息节点,都将及时获取到MQ消息服务中心轮询推送来的消息,确认正处于本SocketIO服务节点的注册列表中是否有接收方客户端;
501:若SocketIO服务节点的会话列表不存在该接收方客户端,则直接对消息丢弃;
502:若SocketIO服务节点的会话列表存在该接收方客户端,则从注册列表中取出接收方客户端的会话连接,并将封装好的健康档案数据向接收方客户端直接进行数据传输直到完成;
600:向接收方客户端完成健康档案数据传输后,接收方医生客户端就获取到了发送方传来的患者健康档案数据,接收方对健康档案数据进行解析,链接到700:接收方所属的系统中,由EHR系统查询详细信息,并返回给接收方客户端进行详情展示。
6.根据权利要求5所述支撑互联网问诊服务的集群式即时消息实现的方法,其特征在于:步骤400中,每一个订阅该通道的SocketIO消息节点都将轮询接收MQ消息服务中心的健康档案数据推送,直到推送完成。
说明书 :
一种支撑互联网问诊服务的集群式即时消息系统及其实现
方法
技术领域
背景技术
用信息资料的传递,而且能实现EHR(健康档案)、视频交流、在线处方等第三方医疗业务系
统的整合协作。例如:发送方提供患者健康档案编号给消息服务节点,消息服务节点对EHR
系统进行调用,提取健康档案数据库患者基本信息,并封装成网络可传递的数据包给接收
方,便于接收方快速查阅该数据包中患者的基本信息,数据包最终发送给接收端,接收端会
根据数据包中的数据来源及证书授权实现对方院内EHR系统的访问穿透查询能力,为接收
方客户提供患者详细健康数据调阅能力。那么EHR系统就存在与即时消息系统非常紧密的
业务协作关系,视频交流、在线处方等亦如此。
议,发送方消息在本消息服务节点上路由到接收方消息服务节点,最终到达目的接收端。例
如:Jabber/XMPP协议与架构由IETFXMPP协议(RFC3290)标准化,就是一种比较典型的符合
分布式架构特点的标准即时消息协议,用户名通过Jabber识别符表示(some@example.com
类似邮件格式),@前半部分表示用户名,@后半部分表示所属的XMPP协议服务器域名,当
sender@A.com用户向receiver@B.com用户发送消息,A.com服务节点首先接收到sender发
送来的XML流消息,然后通过网关路由到B.com服务节点,最后B.com将接收到的XML流消息
发送给所属receiver用户,实现完整消息路由传递。整个过程中A.com,B.com两个服务节
点,分别负载了各自庞大的用户群体,实现了真正的分布式网络架构,一方面基于域名分组
的方式满足大规模、高并发的需求,另一方面也实现了不同服务节点之间通过标准协议的
互联互通。
服务节点和业务系统紧密结合度会远远大于普通的即时消息服务器,若消息服务与业务的
耦合度过于紧密,若业务系统出现不可靠因素,就有可能导致消息服务节点的通讯故障,而
互联网医疗问诊服务对系统的可靠性要求极高,因此保护消息服务节点的高可靠性非常关
键。
传递。但是Jabber识别符的约定虽然巧妙的解决了消息服务节点的扩展,却带来了新的问
题,就是客户端节点必须按照约定的Jabber识别符名称注册到对应域名的消息服务节点
上。一旦对应域名的消息服务节点通讯坏掉,那么就没有办法对所属服务节点下的所有客
户端动态地进行切换到其他服务节点上,除非更换客户端的用户名及所属域,那么在互联
网用户的广泛性上看,这就会带来极高的切换代价。
A.com到B.com,(b)B.com到B客户端的TCP通讯三阶段消息通讯链,同理我们可以得出,C客
户端、D客户端、E客户端……,都是按照此模式由所属的服务节点通过路由的方式和其他服
务节点进行消息传递。当网络中出现A、C、D、E……等服务节点同时向B服务节点传递消息的
情况时,那么B服务节点将成为巨大的压力点,一旦突发这种情况,B服务点就可能会因为压
力出现缓慢甚至崩溃,导致整个网络的通讯异常。而且XMPP协议传递的是XML流数据格式,
对网络带宽占用大,DOM组装和解包处理比较慢,也增加了服务节点的压力。
发明内容
的对接;通过视频消息监听对象,实现与视频服务系统的对接;通过健康档案消息监听对
象,实现与EHR系统对接;通过处方消息监听对象,实现与HIS系统对象;
与业务节点之间的消息通知、业务交互、结果封装及结果消息发送接收端。
与SocketIO服务节点的连接资源;
实现SocketIO集群的调度,SocketIO做为二级集群,提供数百台注册服务子节点的负载;
点注册新的客户端连接;
权数据会缓存在Redis内存数据库中;
情展示;
象,并将封装好的健康档案Json数据通过MQ消息服务中心对象,向MQ消息服务中心进行数
据推送,直到完成;
务中心的所有SocketIO消息服务节点,进行健康档案消息广播;
有接收方客户端;
直到完成;
的系统中,由EHR系统查询详细信息,并返回给接收方客户端进行详情展示。
完成。
则SocketIO服务节点对匹配的监听器实施线程异步,保证主服务继续处理其他消息请求,
不会被监听器与外部服务或系统的交互中所阻塞,实现主消息处理与业务处理的彻底解
耦;
接、销毁中点对点的视频聊天的消息通讯,并封装视频会话状态数据;健康档案消息监听与
健康档案系统交互,根据患者编号查询并封装健康档案索引数据和透传来源信息;处方消
息监听与院内HIS系统交互,根据处方号,查询并获取处方数据;封装后的业务消息数据加
入到主消息服务线程异步处理的封装数据队列事件中,交给主消息服务进行封装数据的出
队处理;形成主消息封装与业务数据封装彻底解耦;
消息转发中心,并对所有订阅该通道的消息服务节点集群进行广播,找到接收方会话的广
播服务节点,同样进行消息事件通知和消息结果封装,同样将结果消息直接发送给接收方
客户端,未找到广播服务节点直接废弃请求消息,通过MQ广播模式,形成集群各个节点间的
通讯与消息路由彻底解耦。
过SocketIO服务节点的注册请求,生成临时的、动态的令牌,形成用户名和及时消息客户端
标示进行了分离,那么用户名由业务系统定义,将不再受即时消息系统的约束。
制,提升整体访问的安全性。
注册到那个消息服务上,会变得资源无法达到最优配置。同时本专利客户端可以形成动态
重连机制,即便是正连接到SocketIO消息服务宕机了,客户端也能自动得重新选择新的
SocketIO服务节点。
通过图文消息监听对象,实现与图像存储系统的对接;通过视频消息监听对象,实现与视频
服务系统的对接;通过健康档案消息监听对象,实现与EHR系统对接;通过处方消息监听对
象,实现与HIS系统对象。这样面向医疗问诊的强侵入业务需求,会通过遍历消息类型的事
件监听机制,将SocketIO服务节点处理消息的机制与医疗问诊等业务系统交互进行了彻底
的解耦。
进行SocketIO服务节点与业务节点之间的消息通知、业务交互、结果封装及结果消息发送
接收端,这样就可以让集群各个节点间的通讯与消息路由彻底解耦。
注册到集群任意消息服务,极大的保证了客户端的即时消息使用的高可靠性;其次基于网
络连接数的均衡负载算法,比手动域名配置来看,最大化利用好集群中每个节点的资源,并
且可以具备更好的动态伸缩性,实现更大规模的即时消息吞吐压力,最后MQ消息中心广播
的模式,不仅降低了每个消息节点的路由压力,而且MQ队列的模式,防止了某个消息节点出
现的突然骤然升高的并发压力,当出现突然的峰值情况,完全可以通过队列处理的一定延
时来防止消息节点崩溃。
加简单动态的注册、切换、销毁与消息集群的连接,加强客户端的高可靠和体验;其次是医
疗业务解耦,通过异步事件监听机制和业务交互让消息节点的主消息处理与业务交互之间
彻底解耦,增强了主消息服务的健壮性、鲁棒性,通过主消息封装与业务交互数据封装的彻
底解耦,让消息模型和业务模型不会产生紧耦合,不仅增强了业务的可靠性,而且可以更容
易的在消息服务基础之上增加更多的业务交互机制,打造更符合医疗业务需要的即时消息
基础设施平台;最后通过MQ消息中心对消息服务的推送、订阅、广播的支持,实现了消息服
务之间的路由解耦,消息服务可以在不需要知道其他集群节点状态的情况下更容易的加入
和销毁,极大的加强了集群的伸缩性和灵活性。
附图说明
具体实施方式
本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他
实施例,都属于本发明保护的范围。
实现SocketIO集群的调度,SocketIO做为二级集群,提供数百台注册服务子节点的负载。
活动。
册新的客户端连接。
中)。
的传递是最简单和便捷的办法。
系统编号;(c)系统编号、注册令牌、消息类型、发送方编号、接收方编号会被封装成一个消
息体,以Json格式作为互联网传输的媒介格式,并通过HttpRest请求形式发送给SocketIO
注册节点。
生所属医院;
一次就诊记录、常见病标示等能描述清楚患者整体轮廓的基本信息;
中,对发送端客户端进行查找匹配,确认在本SocketIO服务节点的注册列表中是否存在接
收方客户端。
对象,向接收方客户端直接进行数据传输,直到完成。
象,并将封装好的健康档案Json数据通过MQ消息服务中心对象,向MQ消息服务中心进行数
据推送,直到完成。
端系统的展示上可以看到患者最基本的个人基本情况和健康信息,若需要进一步掌握患者
的个人健康情况,就需要通过链接的方式,从健康档案Json数据中解析出数据来源,包括了
所属医院EHR系统地址,EHR系统访问证书等一些列EHR透传信息,通过透传访问的形式,链
接到700:接收方所属医院的系统中,由EHR系统查询该患者的详细健康数据,并返回给接收
方客户端进行详情展示。
参与业务逻辑的路由转发工作,无差别地对订阅在该消息服务中心的所有SocketIO消息服
务节点(推送节点除外),进行健康档案消息广播。每一个订阅该通道的SocketIO消息节点
都将轮询接收MQ消息服务中心的健康档案数据推送,直到推送完成。
对象,向接收方客户端直接进行数据传输直到完成;
端系统的展示上可以看到患者最基本的个人基本情况和健康信息,若需要进一步掌握患者
的个人健康情况,就需要通过链接的方式,从健康档案Json数据中解析出数据来源,包括了
所属医院EHR系统地址,EHR系统访问证书等一些列EHR透传信息,通过透传访问的形式,链
接到700:接收方所属医院的系统中,由EHR系统查询该患者的详细健康数据,并返回给接收
方客户端进行详情展示。
听)、HISListener(处方消息监听),若该消息类型匹配该监听器,则SocketIOServer对匹配
的监听器实施线程异步,保证主服务继续处理其他消息请求,不会被监听器与外部服务或
系统的交互中所阻塞,实现主消息处理与业务处理的彻底解耦;
(视频聊天服务)形成交互,主要进行通知、建立连接、销毁等点对点的视频聊天的消息通
讯,并封装视频会话状态数据;EHR Listener与EHR System(健康档案系统)交互,根据患者
编号查询并封装健康档案索引数据和透传来源信息;HISListener与HISSystem(院内HIS系
统)交互,根据处方号,查询并获取处方数据。封装后的业务消息数据加入到主消息服务线
程异步处理的封装数据队列事件中,交给主消息服务进行封装数据的出队处理;形成主消
息封装与业务数据封装彻底解耦。
推送给MQ消息转发中心,并对所有订阅该通道的ServerIOServerCluster(消息服务节点集
群)进行广播,找到接收方会话的广播服务节点,同样进行消息事件通知和消息结果封装,
同样将结果消息直接发送给SocketIOclient,未找到广播服务节点直接废弃请求消息。通
过MQ广播模式,形成集群各个节点间的通讯与消息路由彻底解耦。
过SocketIO服务节点的注册请求,生成临时的、动态的令牌,形成用户名和及时消息客户端
标示进行了分离,那么用户名由业务系统定义,将不再受即时消息系统的约束。
制,提升整体访问的安全性。
注册到那个消息服务上,会变得资源无法达到最优配置。同时本专利客户端可以形成动态
重连机制,即便是正连接到SocketIO消息服务宕机了,客户端也能自动得重新选择新的
SocketIO服务节点。
通过图文消息监听对象,实现与图像存储系统的对接;通过视频消息监听对象,实现与视频
服务系统的对接;通过健康档案消息监听对象,实现与EHR系统对接;通过处方消息监听对
象,实现与HIS系统对象。这样面向医疗问诊的强侵入业务需求,会通过遍历消息类型的事
件监听机制,将SocketIO服务节点处理消息的机制与医疗问诊等业务系统交互进行了彻底
的解耦。
进行SocketIO服务节点与业务节点之间的消息通知、业务交互、结果封装及结果消息发送
接收端,这样就可以让集群各个节点间的通讯与消息路由彻底解耦。
理服务模块和客户端授权模块构成;所述消息节点通讯模块由节点通讯模块和会话管理模
块构成;所述消息节点业务集成模块由业务适配模块和业务协同模块构成。
保护范围之内。