Node.js Redis 订阅回调未执行
Node.js Redis subscribe callback not executing
我正在构建一个应用程序,我在其中使用 2 个服务(API-网关和通知)之间的 Redis 连接。对于这个连接,我使用的是Redis的pub/sub方法。我使用的库称为 NRP。
问题是我可以将数据从 API-gateway 传递到 Notifications,但是 API-gateway 没有接收到我需要返回的数据。假设我想登录,然后 API-gateway 将用户名和密码发布到通知中。在通知中,所有登录逻辑都已完成,当一切正常时,我将一条消息发送回 API-gateway。
来自 API-gateway 的代码(其中 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-网关登录成功时,它不会触发 API-网关中订阅的回调。
notificationservice 上的代码是正确的,因为如果我订阅 redis-client 应用程序,它就可以工作。如果在 redis-client 应用程序上发布,它显示我有 1 个侦听器,因此 Api-Gateway 正在侦听。回调没有被执行。
所以我想通了。显然我需要在发送之前对消息进行 json 编码,否则 nrp 库不会接收它。
我正在构建一个应用程序,我在其中使用 2 个服务(API-网关和通知)之间的 Redis 连接。对于这个连接,我使用的是Redis的pub/sub方法。我使用的库称为 NRP。
问题是我可以将数据从 API-gateway 传递到 Notifications,但是 API-gateway 没有接收到我需要返回的数据。假设我想登录,然后 API-gateway 将用户名和密码发布到通知中。在通知中,所有登录逻辑都已完成,当一切正常时,我将一条消息发送回 API-gateway。
来自 API-gateway 的代码(其中 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-网关登录成功时,它不会触发 API-网关中订阅的回调。 notificationservice 上的代码是正确的,因为如果我订阅 redis-client 应用程序,它就可以工作。如果在 redis-client 应用程序上发布,它显示我有 1 个侦听器,因此 Api-Gateway 正在侦听。回调没有被执行。
所以我想通了。显然我需要在发送之前对消息进行 json 编码,否则 nrp 库不会接收它。