我想在Express框架中使用REST API内部的redis pub Sub机制。当我在REST API外部编写订阅事件时,它工作得很好
module.exports = async function (app) {
client.on('error', (err) => console.log('Redis Client Error', err));
await client.connect();
const subscriber = client.duplicate();
await subscriber.connect();
app.get('/test', async (req, res) => {
console.log('---- inside ----')
await client.publish('request', 'request-message');
res.json({value:"Ok"})
});
await subscriber.subscribe('response', (message) => {
console.log(message); // 'message'
// subscriber.unsubscribe('response');
// res.json({value:message})
});
}
但是如果我在REST Api中添加订阅事件,那么它就不起作用了。
module.exports = async function (app) {
client.on('error', (err) => console.log('Redis Client Error', err));
await client.connect();
const subscriber = client.duplicate();
await subscriber.connect();
app.get('/test', async (req, res) => {
console.log('---- inside ----')
await client.publish('request', 'request-message');
await subscriber.subscribe('response', (message) => {
console.log(message); // 'message'
// subscriber.unsubscribe('response');
res.json({value:message})
});
});
}
使用发布-订阅机制,我想连接其他服务器。但如果我在REST API之外添加订阅事件,则无法将响应发送到客户端。如何实现此过程?
1条答案
按热度按时间bkhjykvo1#
Redis酒吧/订阅是一场火灾,忘记了机制,所以,在你给出的第二个代码片段中,当你的客户订阅时,消息已经被忘记了。所以你必须在订阅之前才能发布。