2014-11-10 2 views
1

아마존 SQS 안에 메시지가 있습니다. 일부 메시지는 지연 작업을 시작하기까지 6 시간의 지연을 필요로합니다. 하나의 해결책은 Thread.Sleep(6h) 일 것입니다. 나는이 솔루션을 좋아하지 않습니다. 스레드에 어떤 일이 일어나고 데이터가 손실 될까봐 두려워하기 때문입니다. 다른 해결책은 메시지를 읽는 것입니다. 6 시간이 경과했는지 확인하고 그렇지 않으면 메시지를 대기열로 반환하십시오. 다시 프로 시저가 많이 발생하기 때문에 나는 그것을 좋아하지 않습니다. 더 나은 해결책이 있습니까 ??지연 작업 AWS

답변

0

개별 다중 대기열을 작성하고 개별 대기열 항목을 넣을 수 있습니까?

예 1

넌 Queue0, queue1을, Queue2, 큐 3, Queue4, Queue5 추천 큐가 해시 (X) = 현재 시간 6 %와 같은 해시 함수를 이용할 수 -이 기능을 0에서 5까지의 값을 반환하고 Queue_f (x)에 항목을 넣고 현재 시간을 기준으로 대기열을 개별적으로 읽을 수 있습니다.

예 2 :

는 현재 시간이 1시 시간 인 경우 Queue0700Hours 같은 별도의 큐를 만들 수 있습니다, 현재 시간이 2시 시간이면 당신은 현명한 같은 Queue0800Hours 같은 다른 새 큐를 만들 수 있습니다 가서.

이렇게하면 처리 대기/중지 필요성을 없애고 현재 타임 스탬프에 따라 생산자와 소비자를 독립적으로 선택할 수 있습니다.

+0

다른 전용 대기열을 만드는 것에 대해 생각했습니다. 나는 그것을 피할 수 있었으면 좋겠다. Amazon이 몇 시간 동안 메시지를 지연시키기 위해 제공하는 상자 솔루션이 있습니까? – Tsahi

+0

상자 밖의 방법은 항목을 대기열에 추가하고 즉시 다른 프로세스에서 읽는 것과 같습니다. 가시성 타임 아웃이 6 시간이되도록 대기열을 설정하십시오. 이렇게하면 대기열 항목은 푸시되고 항목이 선택되면 바로 선택됩니다. 즉, 6 시간 후에 다시 표시됩니다. 6 시간 후에 항목을 확실하게 처리하려면 재시도 횟수가 1로 표시됩니다. –