遇到问题:
使用k8s部署netty服务,想利用k8s的伸缩性部署多个容器。
当用户tcp连接过来时会分发给不同的容器中,所以多个容器中每个都有一些用户的channel
这个时候广播消息就成了问题,因为不同的容器服务拿不到其它容器中的channel
一个不成熟的想法:
当时第一个想法就是用redis存用户信息及channel ,这样就共享信息了。由于channel是有状态的类,所以虽然它可以被序列化存储,但是无法被反序列
一个成熟的想法:
百度之后看到了本文这个标题:用通信来共享内存,我可以不知道哪个用户在哪个容器中,但是每个容器都要订阅消息事件,比如消息中有用户id和发送内容。当触发事件,每个容器都执行查找用户,发送消息的任务。这样总有一个容器服务会完成任务。
具体的订阅发布方式就很多了,如redis,zookeeper,mq.
网友评论