有什么方法可以模拟 mysql 上的 Amazon SQS 消息选择机制(独占选择)?我需要这个来为多个 ec2 实例使用一个 mysql 表,这些实例将处理和删除其中的行。
select ... for update
不是我想要的,因为它在选择时锁定了一个线程,而不是返回未锁定的实例。
有什么方法可以模拟 mysql 上的 Amazon SQS 消息选择机制(独占选择)?我需要这个来为多个 ec2 实例使用一个 mysql 表,这些实例将处理和删除其中的行。
select ... for update
不是我想要的,因为它在选择时锁定了一个线程,而不是返回未锁定的实例。
最终我想到了这个想法(现在不实施):
更改目标表,添加列 lock_name,lock_time
在每次迭代中:
2.1。update target_table set lock_time = now(), lock_name = 'controller_instance_name' where lock_time < now() - visibilityTimeout
2.2. select * from target_table where lock_name = 'controller_instance_name' and lock_time > now() - visibilityTimeout
2.3 对于select中的每一项
2.3.1 处理它
2.3.2 将其从表中删除:从 id = 的 target_table 中删除
每个控制器实例在锁定超过 visibilityTimeout 值后将能够选择行。