有没有什么办法来模拟mysql上的Amazon SQS消息选择机制(独占选择)?我需要这个为多个ec2实例使用一个mysql表来处理和删除行。mysql:独家选择像SQS?
select ... for update
并不完全符合我的要求,因为它在select上锁定了一个线程,并且不返回未锁定的实例。
有没有什么办法来模拟mysql上的Amazon SQS消息选择机制(独占选择)?我需要这个为多个ec2实例使用一个mysql表来处理和删除行。mysql:独家选择像SQS?
select ... for update
并不完全符合我的要求,因为它在select上锁定了一个线程,并且不返回未锁定的实例。
最后我来到了这个想法(现在不执行):
ALTER目标表,列添加lock_name,lock_time
在每次迭代:
2.1。更新target_table设置lock_time = now(),lock_name ='controller_instance_name'其中lock_time < now() - visibilityTimeout
2.2。 SELECT * FROM target_table其中lock_name = 'controller_instance_name' 和lock_time>现在() - visibilityTimeout
2.3在选取
2.3.1手柄的每个项目它
2.3.2从表中删除:删除from target_table where id =?
每个控制器实例将能够在锁定超过visibilityTimeout值后选择行。