Я создаю приложение, в котором я использую соединение Redis между двумя службами (API-шлюз и уведомления). Для этого я использую метод 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, что вход в систему выполнен успешно, он не запускает обратный вызов для подписки в шлюзе API. Код в службе уведомлений правильный, потому что, если я подписываюсь на приложение redis-client, оно работает. и если опубликовать в приложении redis-client, он показывает, что у меня есть 1 прослушиватель, поэтому Api-Gateway прослушивает. Как-то не выполняется обратный вызов.