我有一个队列(在本例中为Amazon SQS),并且有N个运行相同服务的节点正在使用来自SQS的消息。
如何确保在任何时间点,从队列中读取同一条消息的节点都不超过一个。
对于Kafka,我们知道,不能将来自同一消费者组的一个消费者分配给单个主题分区。我们如何确保在Amazon SQS内部处理相同的事情?
答案 0 :(得分:1)
阻止消息传递给多个使用者的亚马逊机制是Visibility Timeout:
接收到消息后,它立即保留在队列中。为了防止其他使用者再次处理该消息,Amazon SQS设置了可见性超时,在这段时间内Amazon SQS阻止其他使用者接收和处理该消息。消息的默认可见性超时为30秒。最小为0秒。最长为12小时。
收到消息后,SQS将开始超时,并且在其持续时间内,它不会再次将其发送给其他使用者。超时结束后,如果尚未删除该消息,则SQS会将其重新提供给其他使用者。
但是如注释所示:
对于标准队列,可见性超时不能保证不会两次收到消息。有关更多信息,请参见至少一次交付。
如果您只需要一次交付的绝对保证,则必须选择: