bug 1. 向消息中间件PUBLISH发布消息不成功,导致无法跨服务器通信
bug 2. 多次向中间件SUBSCRIBE订阅消息,出现无响应,客户端也无响应
问题背景
以redis的发布-订阅机制作为集群服务器的消息中间件,解耦服务器之间的通信。用hiredis做客户端编程。
Bug1
两个客户端C1和C2分别登录在两台服务器S1和S2上,服务器通过redis作为消息中间件进行消息通信。当客户端C1和C2通信时,C1先发送消息到S1上,S1向redis上名字为C2的channel通道发布消息,S2服务器从C2的channel上接收消息后,再把消息转发给C2客户端,注意hiredis提供的发送redis命令行接口函数redisCommand,在发送发布-订阅命令时,需要在不同的上下文Context环境中进行,不能够在同一Context下进行。
// 下面redisCommand函数的第一个参数this->_publishContext需要使用一个单独的Context,不能
// 和subscribe使用一样的Context
redisReply *reply = (redisReply*)redisCommand(this->_publishContext, "PUBLISH %d %s", channel, message.c_str());
Bug2
客户端偶尔出现登录以后没有响应,造成业务不能继续进行&#