微服务处理来自 redis pubsub 的事件

Microservices handeling events from redis pubsub

我正在尝试创建一个微服务来监听 redis pubsub 通道并将一些事件保存到数据库中。

在我的测试用例中,我正在启动我的微服务的 2 个实例,它们都在收听同一个频道。

我现在面临的问题是,对于收到的每个事件,两个实例都会同时更新数据库,我想知道是否有办法阻止此操作?

好像每个事件都会选出一个实例来执行更新?

有两种消息系统:pub-subqueue。对于 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的解决方案,你不需要重新发明轮子。