我正在构建一个应用程序,我在两个服务(API网关和通知)之间使用Redis连接。对于此连接,我使用Redis的pub / sub方法。我使用的库叫做NRP。
问题是我可以将数据从API网关传递到通知,但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);
});
}
所以问题是,我在通知服务上发布的时刻告诉Api网关登录是succesvol,它不会触发API网关中订阅的回调。 通知服务上的代码是正确的,因为如果我在redis-client应用程序上订阅,它就可以工作。如果在redis-client应用程序上发布它显示我有1个监听器,那么Api-Gateway正在监听。不知怎的,回调没有被执行。
答案 0 :(得分:0)
所以我想通了。显然我需要在发送之前对消息进行json编码,否则nrp库不会接收它。