2017-12-01 22 views
1

Amazon SDK for PHP 버전 3.44 (2017-11-30 릴리스)를 사용하고 있습니다. 내 Amazon SQS 계정에 연결하여 listQueues(), getQueueUrl(), getQueueAttributes() 및 receiveMessage() 명령을 정상적으로 실행할 수 있습니다. 그러나 sendMessage() 명령은 다음 메시지와 함께 일관되게 실패합니다.aws-sdk-php v3.44가 SQS FIFO 대기열에 메시지를 보내지 못함 : MessageGroupId가 누락 되었습니까?

요청에 매개 변수 MessageGroupId가 있어야합니다.

이 매개 변수를 반드시 포함하고 있습니다. 내가 사용하는 aws-sdk-php API의 버전이 중요하지 않은 것 같지만이 메시지는 계속 되돌아옵니다. 나는 몇 시간이 PHP SDK를 통해 아마존 SQS FIFO 큐에 메시지를 전송하는 작업, 예를 들어, 검색이 가능하지 믿기 시작하고 보냈다

$queue = SqsClient::factory([ 
    'profile'  => $profile, 
    'region'  => $region, 
    'version'  => '2012-11-05', 
    'credentials' => $credentials, 
]); 
$queue_list = $queue->listQueues(); // ok 
$url  = $queue->getQueueUrl(['QueueName'=>$queue_name]); // ok 
$received = $queue->receiveMessage(['QueueUrl'=>$url->get('QueueUrl')]); // ok 
$response = $queue->sendMessage([ 
    'MessageBody' => $message, 
    'MessageGroupId' => $message_group_id, 
    'QueueUrl'  => $url->get('QueueUrl'), 
]); // fails with message indicating MessageGroupId is missing 

: 여기 내 코드입니다. 아무도 밖에서 SQS FIFO 큐와 함께 작동하도록 aws-sdk-php 라이브러리를 얻을 수 있었습니까?

+0

'$ message_group_id'이 (가) 정확히 채워 졌습니까? 내 생각은 아마도 null이 매개 변수로 해석되지 않을까? – mulquin

+0

예, 리터럴 및 스칼라 변수를 사용하여 MessageGroupId의 값을 변경했습니다. – hanmari

답변

0

첫 번째 줄은 SqsClient의 인스턴스를 만들고 SQS 큐를 만들지 않습니다. 여전히 $ queue-> createQueue를 호출 할 필요가있다. 설명서를 참조하십시오. FIFO 대기열의 경우 "FifoQueue"를 "true"로 설정하고 대기열을 만들 때 "ContentBasedDeduplication"을 설정해야합니다. 작성한 대기열의 ContentBasedDuplication 설정에 따라 메시지를 보낼 때 "MessageGroupId"와 함께 "MessageDeduplicationId"를 전송해야 할 수도 있고하지 않을 수도 있습니다.

코드에서 코드 작성 방법을 확인할 수 없습니다.

  • 는 "FifoQueue"=>
  • 당신은 "ContentBasedDeduplication"로 설정 했는가 "사실"을 "true"또는 "false"속성과 함께 FIFO 큐를 사용 했습니까?
  • 확장명이 ".fifo"인 대기열의 이름을 지정 했습니까?

나는이 모든 작업을 수행하고 ContentBasedDeduplication을 "false"로 설정하여 내 대기열을 구성했습니다. 메시지를 보낼 때 MessageGroupId와 함께 보내지 않은 다른 속성은 MessageDeduplicationId뿐입니다. 나는 sdk 3.44를 사용하여 FIFO 큐에 메시지를 보낼 수있다.

+0

프로그래밍 방식으로 SQS FIFO 대기열을 설정하는 방법을 설명했습니다. aws-sdk-php v3 프레임 워크를 사용하여 대기열로 메시지를 보낼 수 있습니까? 이것은 특히 질문에 관한 것입니다. – hanmari

+0

예. 네가 정확한 버전을 사용하고있어. –

+0

Amazon SQS 웹 인터페이스를 통해 대기열을 수동으로 만들었습니다. 내가 FIFO를 사용하여 대기열을 설정하고 내용 기반 중복 제거를 강제로 확인란을 선택했습니다. 프로그래밍 방식으로 대기열을 만들지는 않았지만 위의 코드를 사용하여 대기열에 메시지를 삽입 할 수 있어야합니다.그러나 "MessageGroupId 매개 변수가 요청에 들어 있어야합니다."라는 오류 메시지가 계속 나타납니다. 게시 된 코드에 문제가 있습니까? 예제로 작업 코드를 게시하여 sendMessage() 함수를 비교할 수 있습니까? – hanmari

0

아마존이 API 호출을 차단하고 있던 버그를 조용히 해결 한 것처럼 보입니다. 대기열 설정이나 코드를 변경하지 않았습니다. 지난 주 오류 메시지를 발생시킨 API 호출이 이제는 정상적으로 실행됩니다.

0

3.3.0에서이 문제가 영원히 발생했습니다. 내 경우에는 3.44.2로 업그레이드 한 다음 MessageGroupId 외에 MessageDeduplicationId를 전달해야했습니다. 이 문제가 발생하면 SDK 버전을 다시 확인해야합니다.