有什么方法可以模拟 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 值后将能够选择行。