k8s如何实现node.js服务使用pubsubN个实例只通知单个任一实例。
发布于 5 年前 作者 evershy 3225 次浏览 来自 问答

现在服务要上k8s,使用了pubsub,多个实例都会订阅redis事件,如何只让任一个单一实例收到通知,而非所有实例。 还是会有更好的方式处理这种多实例的问题?

7 回复

遇到过你说的问题,redis的消息中间件功能,原生只有pubsub一种模式,P2P模式没有直接的实现。 有第三方的代码来时间,可以git上搜索bull即可。但是我做过测试,使用bull来实现.https://github.com/OptimalBits/bull 用的好像是redis的队列功能。具体的没有细研究。 但是我做过测试,使用bull,一个消息发布,在多个终端接收的情况下,在本机没有网络延时的情况下,一个消息需要二十几毫秒左右才可以到接受终端上。这个是我不能忍受的。 后来我还是使用了mq来做这一块的功能,可以做到基本的实时。

建议用artemisMQ , FQQN (“Fully Qualified” Queue Names) 可以解决这个问题

@pzzcn 使用消息队列,二十几毫秒延迟应该是可接受的啊

发布的时候指定处理者,或用redis自带的分布式锁

来自酷炫的 CNodeMD

@waitingsong 在无大负载的情况下二十几毫秒,我为什么不选择使用几乎无延时的mq来完成呢,mq在本机无负载情况几乎无延时

@zswnew 发布的时候指定处理者,这就有个前提,处理者必须在线。你必须再写一套逻辑来保证处理者在线。

@pzzcn etcd有个设置过期键的,并可定时续期,redis也能做,再结合键空间通知,能实现心跳包那种效果

来自酷炫的 CNodeMD

回到顶部