Node.js Redis预订回调不执行

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (137)

我正在构建一个应用程序,使用2个服务(API网关和通知)之间的Redis连接。为此,我使用Redis的pub / sub方法。我使用的库称为NRP。

问题是我可以将数据从API网关传递到Notifications,但是我需要的数据没有被API网关接收。想象一下,我想登录,然后API网关将用户名和密码发布到通知中。在通知中,登录的所有逻辑都正在完成,并且一切正常时,我都会将消息发送回API网关。

来自API网关的代码(其中subchannel和pubchannel作为函数的参数提供):

{
    return new Promise((resolve, reject) => {
                try {
                        this.sub.Subscribe(subchannel, (data, channel) => {

                            let body = data.body;      
                            let message = body.message;     
                            if(data.rmid == data.mid){
                                sub.unSubscribe((nrp)=>{
                                    nrp.quit();
                                    resolve(message);
                                });
                            }

                        }); 
                        const sent = this.sub.publish(pubchannel, {
                        body: {
                                param: params,
                                message: '',
                              }
                        });



                } catch (e) {
                    reject(e);
                }
            });
}

上面的sub.Subscribe部分的代码,也是订阅发布的部分:

Subscribe(pattern, callback)
{
    console.log('Im gonna subscribe');
    console.log(pattern);
    nrp.on(pattern, (data, channel) => {
        console.log('subd on ' + pattern);
       return callback(data, channel);
    });


}

所以问题是,当我在notificationservice上发布告诉Api-gateway的登录是succesvol时,它不会触发API网关中订阅的回调。notificationservice上的代码是正确的,因为如果我在redis客户端应用程序上订阅,它将起作用。如果在redis客户端应用程序上发布,它显示我有1个监听器,所以Api-Gateway正在监听。不知何故回调没有被执行。

提问于
用户回答回答于

需要在我发送消息之前对消息进行json编码,否则nrp库不会选择它。

扫码关注云+社区

领取腾讯云代金券