2017-11-09 5 views
0

두 개의 람다 인스턴스가 동시에 실행되며이 두 인스턴스는 몇 초 간격으로 동일한 FIFO 큐에 대한 짧은 폴링을 수행합니다.동일한 SQS FIFO 큐에 receiveMessageRequest 실행

큐에 총 15 개의 메시지가 있지만 첫 번째 인스턴스는 처음 10 개의 메시지를 받고 두 번째 인스턴스는 0 개의 메시지를받습니다.

두 번째 인스턴스가 큐에서 나머지 5 개의 메시지를 가져올 수없는 이유는 무엇입니까? 이것이 예상되는 행동이며 어떻게 극복 할 수 있습니까?

답변

2

15 개의 메시지 (대부분)는 모두 동일한 메시지 그룹 ID에 속합니다. 따라서 처음 10 개가 성공적으로 처리되고 삭제 될 때까지 나머지 5 개는 사용자가 사용할 수 없게됩니다. FIFO 대기열의 경우 이것은 메시지 순서를 유지하는 예상되는 동작입니다 (아래 주석에 따라이 대답으로 올바른 방향을 가리키는 @ Michael-sqlbot).

표준 대기열에 long polling을 사용하십시오. 짧은 폴링은 모든 SQS 서버를 검사하지 않으므로 모든 결과를 얻지 못할 수 있습니다. 긴 폴링은 모든 SQS 서버를 검사하므로 모든 결과를 얻습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 이미 그 일을 시도했다. 'setWaitTimeSeconds'의 값을 20 초로 설정하고 로그를 기반으로 20 초 동안 폴링했지만 두 번째 람다 인스턴스에서 검색된 메시지가 없었습니다. – JustStarted

+0

충분히 공정해야 이론적으로 그렇게해야합니다. 큐 자체에'ReceiveMessageWaitTimeSeconds' 속성을 설정하려고 했습니까? – smcstewart

+2

@StevenS. 귀하의 대답은 정확하게 될 것이지만 이것은 FIFO 대기열입니다. 메시지가 모두 하나의 그룹에있는 경우 FIFO 큐에 대한 올바른 동작입니다. 다른 사용자가 동일한 그룹의 메시지를 갖도록 허용하면 FIFO를 위반하게됩니다. –