我在 Express 应用程序中使用 Redis。我的应用程序既是流的发布者又是消费者,使用单个 redis 连接 (redis.createClient)。我对管理永久订阅(使用 xreadgroup)的最佳方式有疑问。目前我正在这样做:
const readStream = () => xreadgroup('GROUP' appId, consumerId, 'BLOCK', 1, 'COUNT', 1, 'STREAMS' key, '>')
.then(handleData)
.then(() => setImmeadiate(readStream));
wherexreadgroup
只是 node-redis' 的一个承诺版本xreadgroup
。
我的问题 - BLOCK 的适当用法是什么?如果我无限期或长时间阻止,那么我的客户xadd
在解除阻止或阻止超时之前无法发布任何消息(带有 )。由于我必须使用某种循环/递归来继续阅读事件,BLOCK
因此似乎没有必要;我可以把它关掉吗?这是预期的用途吗?
同样,使用 setImmeadiate 是否合适,还是首选 process.nextTick 或异步循环?
node-redis 中的文档很少,少数示例只是在阻塞后读取消息一次,并且不在同一个客户端上生成/使用。