一种基于ActiveMQ的客户端在线状态更新的方法、程序和系统与流程

文档序号:23175631发布日期:2020-12-04 14:06阅读:662来源:国知局
一种基于ActiveMQ的客户端在线状态更新的方法、程序和系统与流程

本发明涉及通信领域,具体为一种免基于activemq的客户端在线状态更新的方法、程序和系统。



背景技术:

现有技术中,设备(即客户端)和中间件建立和断开连接时,由业务系统的上下线程序通过监听activemq主题"activemq.advisory.connection"处理上线下线逻辑。

其逻辑过程为:

设备a连接activemq,中间件生成客户端上线消息,该消息包含了会话id和客户端id,会话id每建立一次连接都会生成且每次连接都是新的会话id,上下线程序通过监听主题获取上线消息,更新设备端的状态为在线;

设备a断开和activemq的连接时,会通过中间件,中间件会生成客户端下线消息并断开连接,客户端下线消息被上下线程序监听后更新客户端状态为下线;

存在的问题在于:

设备a是在线连接activemq状态,当设备a网络突然断开,这时设备a来不及发送下线消息给activemq,此刻的设备a在activemq仍然是处于在线状态,短暂时间后(以秒或毫秒计,几乎不会对用户的指令处理造成可感知的延迟),设备a网络恢复会重新连接activemq,发送上线请求,activemq处理设备a的上线请求发出设备上线的主题,同时发现设备a仍有旧的连接处在在线状态即activemq会发现存在两个连接,一个新的刚刚建立的连接和旧的连接,就会把旧的连接给断开(同一个客户端同时只能有一个连接),发出设备下线的消息给上下线程序,但是此时设备a的真实状态应该是在线的,activemq对于设备a来说,最后的消息是设备下线,单纯的对该上下线主题处理设备的在线状态,则会造成不正确的状态,即设备a此时是在线,但是上下线处理程序会将状态更新为下线。

所以,本案所要解决的技术问题是:如何避免设备在线状态更新错误。



技术实现要素:

针对以上现有技术存在的不足之处,本发明的目的在于提供一种基于activemq的客户端在线状态更新的方法,上下线处理程序基于该方法可以避免客户端的在线状态更新错误,同时,本发明还公开了基于该方法的程序和系统。

为实现上述目的,本发明提供如下技术方案:

一种避免基于activemq的客户端假在线的方法,所述方法为:

在接收到activemq中间件发送的客户端上线消息时,更新数据库中会话id和客户端id的映射关系,并使客户端的状态处于在线状态;

在接收到activemq中间件发送的客户端下线消息时,查询数据库中是否存在包含会话id的映射,若存在,则清除该会话id和客户端id的映射关系并将客户端的状态更新为下线状态,若不存在,则保持客户端的状态为在线状态不变;

所述客户端上线消息包括客户端id和客户端和activemq中间件之间建立连接时生成会话id,所述客户端下线消息包括会话id。

在上述的避免基于activemq的客户端假在线的方法中,通过订阅activemq中间件的上下线主题获取客户端上线消息和客户端下线消息。

同时,本发明还公开了一种上下线处理程序,包括如下模块:

数据库:用于存储会话id和客户端id的映射关系;

上线消息处理模块:用于在接收到activemq中间件发送的客户端上线消息时,更新数据库中会话id和客户端id的映射关系,并发送上线指令给状态更新子模块;

下线消息处理模块:在接收到activemq中间件发送的客户端下线消息时,查询数据库中是否存在包含会话id的映射,若存在,则清除数据库中该会话id和客户端id的映射关系并发送下线指令给状态更新子模块,若不存在,则忽略该客户端下线消息;

状态更新模块:用于根据上线指令和下线指令更新客户端在线状态。

在上述的上下线处理程序中,还包括缓存模块,所述客户端在线状态存储在缓存模块内或数据库内;所述状态更新子模块对存储在缓存模块或数据库内的客户端在线状态的进行更新。

最后,本发明还公开了一种客户端在线状态处理系统,包括activemq中间件、如上所述的上下线处理程序;

activemq中间件:用于建立和客户端的连接时,生成客户端上线消息;断开客户端的连接时,生成客户端下线消息;当activemq中间件中同时存在和同一客户端的多个连接时,断开除最近的连接之外的其他连接;将客户端上线消息、客户端下线消息发送给上下线处理程序的上线消息处理模块、下线消息处理模块。

与现有技术相比,本发明的有益效果是:

通过清除原有的会话id和设备端id的映射关系,使数据库中仅仅保存最新的映射关系,这样设备在掉线并短时间再连接的情况下,不会发送设备下线消息,会持续保持设备在线的状态,避免中间件的连接更新机制导致的假下线的问题出现。

附图说明

图1为本发明实施例1的流程图。

图2为发明实施例1的系统框图。

具体实施方式

下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。

实施例1

参考图1,一种避免基于activemq的客户端假在线的方法,所述方法为:

在接收到activemq中间件发送的客户端上线消息时,更新数据库中会话id和客户端id的映射关系,并使客户端的状态处于在线状态;

在接收到activemq中间件发送的客户端下线消息时,查询数据库中是否存在包含会话id的映射,若存在,则清除该会话id和客户端id的映射关系并将客户端的状态更新为下线状态,若不存在,则保持客户端的状态为在线状态不变;

所述客户端上线消息包括客户端id和客户端和activemq中间件之间建立连接时生成会话id,所述客户端下线消息包括会话id。

客户端在上线时,会建立和activemq中间件的联系,activemq中间件在建立和客户端的联系时,会建立一会话id和获取客户端id,并将会话id和客户端id生成客户端上线消息;

业务系统中的上下线程序会监听activemq中间件的主题"activemq.advisory.connection",客户端上线消息、客户端下线消息均在该主题中,业务系统中的上下线程序会根据通过监听该主题得到的客户端上线消息、客户端下线消息进行上述的处理。

本方案的核心在于,对于数据库中会话id和客户端id在每次设备上线时进行更新,去除与该客户端id相关联的任何映射关系,仅保存最新的映射关系,本实施例中所述的映射关系是指会话id和客户端id组成的一组数据。数据库中会存储各客户端的映射关系。

通过该方法,可避免客户端在几乎无感知的时间段内掉线再连接时业务系统的上下线程序更新设备状态为下线,避免了设备的在线状态的更新混乱。

进一步的,本实施例还公开了一种设备上下线处理系统,其包含了上下线处理程序、activemq中间件,参考图2,上下线处理程序是包含在业务系统中的,用户通过业务系统中的上下线处理程序感知客户端的在线状态;其包括如下模块:

数据库:用于存储会话id和客户端id的映射关系;

上线消息处理模块:用于在接收到activemq中间件发送的客户端上线消息时,更新数据库中会话id和客户端id的映射关系,并发送上线指令给状态更新子模块;

下线消息处理模块:在接收到activemq中间件发送的客户端下线消息时,查询数据库中是否存在包含会话id的映射,若存在,则清除数据库中该会话id和客户端id的映射关系并发送下线指令给状态更新子模块,若不存在,则忽略该客户端下线消息;

状态更新模块:用于根据上线指令和下线指令更新客户端在线状态;

客户端在线状态可存储在数据库内,状态更新模块在更新客户端的状态时修改数据库的客户端在线状态的数据即可;

activemq中间件用于建立和客户端的连接时,生成客户端上线消息;断开客户端的连接时,生成客户端下线消息;当activemq中间件中同时存在和同一客户端的多个连接时,断开除最近的连接之外的其他连接;将客户端上线消息、客户端下线消息发送给上下线处理程序的上线消息处理模块、下线消息处理模块。

在本实施例中,还可以额外包括缓存模块,客户端在线状态也可以缓存在缓存模块内,状态更新模块在更新客户端的状态时修改缓存模块的客户端在线状态的数据即可,每次程序重启后该缓存中的,客户端在线状态会被清除。

上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其它的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1