작성
·
82
1
DLX에서 consumer가 DLQ에 에러를 저장하는 과정에 대해 이해가 잘 안되는 부분이 있습니다.
에러가 발생하면 DLQ에 넣는다.
다음 처리를 하는데 들어온 이벤트의 타입을 DLQ의 에러가 발생한 이전 이벤트 타입과 동일한지를 비교하여 같다면 있다면 DLQ에 넣는다
2번 처리에서 consumer는 모든 작업을 수행하기 전 이벤트 타입을 DLQ에 있는 모든 이벤트 타입과 비교하는 작업을 한다는 전제인가요?
그렇다면 일반적으로 DLQ에 누적되는 각기 다른 이벤트 타입의 수가 많지 않을 것이기 때문에 (동일한 이벤트 타입들은 사실 1개로 처리) 이벤트 실행 중 발생하는 에러 결과를 DLQ에 넣는 것 보다, 작업 전 이미 발생한 에러 이벤트 타입과 비교하여 동일한 이벤트 들은 처리를 하기 전, DLQ에 넣는게 전체적으로 효율성이 높기 때문이라 볼 수 있는 것일까요?
답변 1
0
안녕하세요 bluebamus님,
강의에서도 언급을 했는데, 제가 잘 설명을 잘 못했나 보네요. 일단, 기억할 점은 저희가 순서를 기억해야 되기 때문에 DLQ를 사용하고, 같은 타입은 같은 Queue에 넣는 겁니다. 이벤트 타입 자체는 저희가 Redis 같은 것을 사용하셔서 어떠한 타입의 이벤트 큐가 있는지만 확인하고, 있다면 그 큐에 넣으면 되는 겁니다.
같은 타입 임에도 데이타 자체가 문제가 있을 수도 있고, 문제가 없을 수도 있습니다. 문제가 없는 데이터를 굳이 계속 확인을 할 필요는 없겠죠?
도움이 되셨으면 좋겠네요!
그렇다면 celery 작업시 에러가 발생하면 DLQ에 넣는다. 만약, 동일한 작업이 여러번 요청이 오게 되고 이로 인해 동일한 에러가 계속해서 반복 되더라도 celery는 에러가 발생하는 동일한 위치까지 작업을 수행하고 발생된 에러는 DLQ에 순차적으로 넣는다
이렇게 이해를 하면 될런지요 ^^