netty实现消息通信

需求如下:物业系统A、B、C,很早之前都是单机应用,部署在小区机房,现提出云平台概念,用来统一管理各个物业系统,所有的用户请求都先走云平台,通过云平台采集信息,然后转发给下游各个物业系统。(为了统一采集信息,后期数据分析等业务扩展)

实现:此处使用netty通信,为什么用netty呢,而不直接使用转发?因为由于物业机房ip不固定,所以只能使用socket长连接方式发送消息。

netty实现消息通信

云平台维护一个socket连接池,简单来说就是内存里的一个map(可优化成redis),小区应用会启task一直尝试连接云平台(推送心跳消息),需要发送消息时,通过小区唯一code就能找到对应的channel管道了。

开发中,遇到一个问题,所有信息需要在云平台落地,小区系统也需要落地,但是socket消息并不是实时响应(云平台发送请求,下一次接收到响应并不一定对应上一次请求)。我们采用了最简单的方式,还是内存中维护了一个map,用来存储下所有的消息response,每次需要响应的时候从map中拿,并且有重试机制,2S重试一次