例如,我有一个todo列表,表示为带有“IsComplete”字段的数据库中的行。
在每小时结束时,我想找到所有的待办事项没有标记为完整,并发送提醒给他们的个人创造者。
每小时有数以百万计的待办事项,发送提醒是一个昂贵的过程。
我有一个工人角色,它将高兴地每小时运行一次,得到这些不完整的待办事项,并将每一个任务添加到服务总线队列中,由另一组工作人员负责处理发送提醒的昂贵任务。
这种设想所面临的问题是:
有什么模式可以解决或避免这种并发问题?让多个角色首先扫描相同的表,以获得运行多个角色所提供的保护吗?
发布于 2013-09-02 19:17:14
您可以查看Master/Slave模式。
假设您有x数量的员工角色。在每小时开始时,x工作者角色中的一个工作者角色将成为大师。这可以通过获取blob的租约来实现。所有实例都将尝试获取同一个blob的租约,只有一个会成功。成功的人将被指定为Master。
现在,Master可以从数据库中获取数据并将消息推送到队列中。所有Slave实例都将轮询此队列,当消息开始到达队列时,从实例将GET一个或多个消息并处理它们。如果一个实例无法处理该消息,它将在一段时间后(可见性超时)重新出现在队列中,以便其他实例现在可以得到该消息并处理它。
https://stackoverflow.com/questions/18579365
复制相似问题