2017-02-07 29 views
0

我正在尝试创建一个微服务来监听redis pubsub频道并将一些事件存入数据库。来自redis pubsub的微服务handeling事件

在我的测试案例中,我旋转了2个我的微服务实例,都听同一个频道。

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

喜欢每个事件一个实例将被选为执行更新?

回答

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 

注意:这是不是一个完美的解决方案,它有一些可靠的问题。但是,有一些基于Redis的开源解决方案,您不需要重新发明轮子。