例如,我有一个待办事项列表,表示为具有“IsComplete”字段的数据库中的行。
在每个小时结束时,我想找到所有未标记为完整的待办事项,并向其各个创作者发送提醒。
每小时创建数百万个待办事项,发送提醒是一个昂贵的过程。
我有一个工作人员角色,每个小时都会愉快地运行以获得这些不完整的待办事项,并将每个角色添加到服务总线队列中,由一组独立的工作人员角色接收,这些角色处理发送的昂贵任务。提醒。
这种情况下面临的问题是:
哪些模式可以解决或避免这种并发问题?是否有多个角色扫描相同的表格,以便首先运行多个角色提供保护?
答案 0 :(得分:0)
您可以查看Master/Slave
模式。
假设您有x
个工作人员角色。在每小时开始时,x
工作者角色中的一个工作角色将成为主角。这可以通过获取blob上的租约来实现。所有实例都会尝试获取相同blob的租约,只有一个会成功。成功者将被指定为Master
。
现在Master
可以从数据库中获取数据并将消息推送到队列中。所有Slave
实例将轮询此队列,并且当消息开始到达队列时,从属实例将GET
一条或多条消息并处理它们。如果某个实例无法处理该消息,它将在一段时间后重新出现在队列中(可见性超时),以便其他实例现在可以获取此消息并进行处理。