Redis提供 BRPOP ,允许发送方/接收方模式保证交付。
发件人: LPUSH foo_key bar_value
接收方: BRPOP foo_key ###
=> 'bar_value'
其中 ### 是一个任意的过期间隔,比如15秒。
但是,如果邮件有两个接收器,您应该怎么办?我考虑过以下几个选项:
如何设置具有实时保证交付的多客户端接收器模型?
只有一条消息将通过我的架构中的特定密钥发送,因此客户端不会意外地两次收到相同的消息。
答案 0 :(得分:2)
发送方可以将值推送到2个队列,每个接收方一个队列。
每个接收者都可以在配置文件中拥有其队列的名称。接收器可以使用阻塞弹出,因此不涉及轮询。
当然,采用这种方法,如果你的一个接收器停止处理,它将很容易被发现。
答案 1 :(得分:1)
我意识到我可以使用 BRPOPLPUSH 来实现这一目标。
发件人: LPUSH foo_key bar_value
后跟EXPIRE foo_key ###
接收方: BRPOPLPUSH foo_key foo_key ###
=> bar_value
其中,和以前一样,每个 ### 都是一些任意的过期间隔,比如15秒。