我正在尝试创建一个监听redis pubsub通道的微服务,并将一些事件保存到数据库中。
在我的测试案例中,我正在调整我的微服务的两个实例,同时收听同一个频道。
我现在面对的是,对于收到的每个事件,两个实例同时更新数据库,我想知道是否有办法阻止此操作?
对于每个事件,将选择一个实例来执行更新吗?
答案 0 :(得分:2)
有两种邮件系统:pub-sub
和queue
。对于pub-sub
系统,每个客户端处理所有事件,而对于queue
系统,每个事件仅由一个客户端处理。似乎您需要的是queue
,而不是pub-sub
。
您可以使用Redis LIST
来实现简单的消息queue
:
// producers push events into a queue
RPUSH que event1
RPUSH que event2
// push other events...
// consumers pop events from the queue
BLPOP que timeout
注意:这是 NOT 一个完美的解决方案,它有一些可靠的问题。但是,有一些基于Redis的开源解决方案,你不需要重新发明轮子。