请大佬帮忙解决一个技术问题。项目使用netty作为服务端接入Gps硬件设备,GPS通过TCP协议与服务端发送数据,发送一共两种包体:发送登陆包告知服务端设备id。以后就一直发送定位包,不再携带设备id(tcp请求是长连接)。这种情况在单实例服务下,我使用netty生成的channelID与设备ID对应放入缓存,这种发送定位包的时候就能查询到设备ID,但是集群情况下我担心会有问题,因为硬件负载有可能将同一个tcp链接发到另外一个实例上,缓存内的对应关系就找不到,由于channelID是netty生成的,换一个实例以后ID肯定会变,如何解决,坐等大佬分析,急,在线等!
Java
Netty
已经解决,硬件可以根据来源ip+来源端口号确认唯一请求链接进行转发,将同一个请求映射到相同实例上.Nginx也有相应的TCP转发模块,经过测试能满足要求; 只要各个环境配置好,就不会出现同一TCP请求负载到其他实例上
硬件负载设备应该可以改包,增加包内容,我以得之前用过7层交换机是可以的
当你接你要new socket时,生成一个id,之后把这个id加在包里,发到后端的设备上
既然是长连接,为什么同一个连接会被转发到其他实例上呢?
软件层面不用想了,channel是与网卡绑定的,就算共享了也毫无意义。
博主解决了吗
channelID与设备ID对应放入缓存,这个缓存是本地缓存吧。如果单实例服务器重新部署后,缓存丢失,用户离线再重新登录吗?