微服务处理来自 redis pubsub 的事件
Microservices handeling events from redis pubsub
我正在尝试创建一个微服务来监听 redis pubsub 通道并将一些事件保存到数据库中。
在我的测试用例中,我正在启动我的微服务的 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
注意:这不是完美的解决方案,它有一些可靠的问题。但是,有一些open-source基于Redis的解决方案,你不需要重新发明轮子。
我正在尝试创建一个微服务来监听 redis pubsub 通道并将一些事件保存到数据库中。
在我的测试用例中,我正在启动我的微服务的 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
注意:这不是完美的解决方案,它有一些可靠的问题。但是,有一些open-source基于Redis的解决方案,你不需要重新发明轮子。