워커에서 이벤트를 처리하는 시간이 sqs의 Visibility timeout을 넘긴 경우, 동일한 이벤트가 다른 워커에서 동시에 처리될 수 있는가?
-> 그렇다.
sqs의 Visibility timeout은 워커가 한 이벤트를 처리하는 동안, 다른 워커가 그 이벤트를 처리하지 못하도록 막을 수 있는 시간을 의미한다.
https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html
하지만 워커가 visibility timeout보다 더 많은 시간을 이벤트 처리에 소모할 경우, 그 이벤트는 다른 워커에게도 보여져 다른 워커에서도 동시에 처리된다.(여러 개의 워커를 사용하고 있다고 가정할 경우 그렇다)
두 개의 워커가 있다.
하나의 워커는 visibility timeout보다 이벤트 처리 시간이 길게 되도록 time.sleep(3) 코드를 추가했다.
{"bye":1}
{"bye":2}
...
{"bye":5"}
총 5개의 메시지를 보낸다.
cloudwatch의 lambda 로그를 확인한다.
{"bye":1} 이벤트가 동시에 처리됐음을 확인할 수 있다.