Если я go в CLI Redis все работает нормально:
subscribe channel
publish channel test
Это сделает волхвы c.
Дело в том, что, используя nodejs
Насколько я понимаю, все работает иначе:
1 - client.on('message')
получает сообщения от ВСЕХ каналов
2 - У команды subscribe
есть обратный вызов, но я не может заставить его срабатывать, как это происходит в CLI, и я не понимаю, почему он существует
Если это так (только на уровне клиента), мне придется контролировать все обратные вызовы каналов с помощью я, что не так сложно, но очень сильно отличается от подхода, который существует в других инструментах, таких как Rabbit, где ваш обратный вызов находится прямо на канале.
Код очень прост c:
function callbackPS (x, y) {
console.log(x , y)
}
await PubSub.subscribe(canal, callbackPS)
await PubSub.publish(canal, 'Hi');
await PubSub.publish(canal, 'Hi 1');
await PubSub.publish(canal, 'Hi 2');
await PubSub.publish(canal, 'Hi 3');
await PubSub.unsubscribe(canal);
В классе PubSub
export class PubSub {
public static async publish(channel: string, buffer: string): Promise<number> {
//const buffer: string = JSON.stringify(message);
return new Promise<number>((resolve, reject) => {
PubSub.redisPublisher.publish(channel, buffer, ((err: Error, channelsDelivered: number) => {
if (err) {
reject(err);
} else {
resolve(channelsDelivered);
};
}));
});
};
public static async subscribe(channel: string, callback: TTMessageSubscriber): Promise<boolean> {
return new Promise<boolean>((resolve, reject) => {
PubSub.redisPublisher.subscribe(channel, ((err: Error, channel: string) => {
if (err) {
reject(err);
} else {
resolve(true);
};
}), channel);
});
};
}