现在服务要上k8s,使用了pubsub,多个实例都会订阅redis事件,如何只让任一个单一实例收到通知,而非所有实例。 还是会有更好的方式处理这种多实例的问题?
遇到过你说的问题,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 发布的时候指定处理者,这就有个前提,处理者必须在线。你必须再写一套逻辑来保证处理者在线。