我将事件数据存储在表存储中。每个工作者角色实例都需要访问该表中的唯一行,并对此数据进行一些处理,如果处理成功,则需要将此数据标记为已完成,以便任何其他实例都不会获取此数据。在处理过程中,此行需要对其他工作人员不可见,这样他们就不会同时处理这一行。
有没有可以解决这个问题的设计?
发布于 2016-11-15 14:38:26
因此,Azure表没有锁定机制。它可用于blobs和队列。
解决此问题的一种可能方法是使用Master/Slave Pattern。因此,让我们假设您有5个工作角色实例在运行。所有这些实例都会定期(比如每30秒)尝试获取blob的租约。只有一个实例能够成功,该实例将成为主实例(所有其他实例将成为从实例)。
现在,任务要做的是从表中获取数据(比如5条记录),并将它们作为单独的消息插入到队列中。一旦主服务器这样做了,它就会自动成为从服务器。slaves要做的是从队列中获取一条消息(将消息出队,以便其他实例看不到该消息),处理它,然后更新表中的记录。一旦从属程序完成了它的工作,它将重新进入睡眠状态,但在该预定时间之后才会醒来。
更多详情请查看Competing Consumer Patterns。
发布于 2016-11-23 17:39:23
使用Azure队列和生产者消费者模式,将工作单元作为消息写入生产者端的队列,并让你的工作者角色使用队列中的工作并处理它。Queue将处理使消息在处理过程中不可见以避免重复,然后每个工作角色都可以在成功处理消息后将其从队列中删除。
https://stackoverflow.com/questions/40589520
复制相似问题