2013-03-12 4 views
0

Amazon SQS와 다양한 메시지 유형 및 메시지 소비자를 사용하여 분산 백엔드에 연결하는 PHP 프론트 엔드를 사용하고 있습니다. 최종 사용자 메시지를 소비하는 새롭고 테스트되지 않은 코드가있는 메시지 처리기가 손실되거나 잘못 처리 될 위험이 있으므로 이러한 소비자를 안전하게 디버깅 할 수있는 방법을 찾으려고합니다.Amazon SQS 소비자 디버깅

실제 메시지 대기열 이름은 클래스에서 PHP 상수로 하드 코딩되었으므로 첫 번째 방법은 프로덕션 용으로 또 다른 디버깅 용으로 두 개의 다른 대기열 세트를 작성하고 대기열 이름 상수를 두 개의 다른 파일 . 디버그 조건이 true인지 아닌지에 따라 이러한 상수 정의 중 하나를 포함시키고 포함 된 파일의 상수를 현재 하드 코딩 된 이름을 가진 클래스 상수에 할당하려고합니다.

이것은 상수가 인스턴스 변수와 같은 값을 할당하려고 시도하는 반면에 PHP에서 클래스 변수처럼 작동하는 것처럼 보이기 때문에 작동하지 않는 것처럼 보입니다. 다음 전략은 Amazon의 측면에서 우리 코드에 많은 해킹을 추가하지 않고 투명하게 메시지 소비자를 디버그 할 수있는 것이 있는지를 확인하는 것이 었습니다. 그러나이 작업을 쉽게 수행 할 수는 없었습니다. 다른 사람이 경험했는지 (그리고 이상적으로이 문제를 해결했는지 알고 싶다)

답변

2

SQS는 대기열에있는 메시지의 내용을 검사하거나 보낸 사람이 소비자인지 확인하는 방법을 제공하지 않습니다. 메시지를 처리하지 못했습니다.

이 문제에 대한 일반적인 접근 방법은 사용자가 제안한대로 두 세트의 대기열을 설정하고 생산자가 두 대기열에 동일한 메시지를 게시하게하는 것입니다. 이렇게하면 실제 생산 대기열에 영향을 미치지 않고 생산 메시지 스트림에 대해 코드를 디버그 할 수 있습니다.

어떤 코드를 사용하여 config로 이동했는지 결정한 다음 개발 상자와 프로덕션 상자에 다른 구성 파일을 배포하는 것이 좋습니다. 개발 상자가 프로덕션 시스템과의 대화를 끝낼 위험이 있으므로 항상 모든 코드에서 엔드 포인트를 구성하는 일관된 단일 접근 방식을 사용하면 코드를 호출 할 때마다 임시로 수행하는 것이 훨씬 위험합니다 서비스.

생산 및 개발 대기열을 다른 액세스 자격 증명을 사용하여 다른 AWS 계정에 배치하는 것도 좋습니다. 이렇게하면 프로덕션 계정에 개발 계정의 큐에 게시 할 수있는 권한을 부여 할 수 있지만 개발 시스템이 프로덕션 큐에서 읽을 수 없음을 보장 할 수 있습니다.