[SQS] InvalidParameter
標準キューに以下のパラメータで Enqueue しようとしたら InvalidParameter だと言われた。
input := &sqs.SendMessageInput{
DelaySeconds: nil,
MessageBody: awssdk.String(string(marshaled)),
QueueUrl: awssdk.String(config.AWS.SQS.QueueURL),
MessageGroupId: aws.String("test"),
MessageDeduplicationId: aws.String("test"),
}
MessageGroupId
と MessageDeduplicationId
の指定を削除すると、正常に Enqueue できた。
input := &sqs.SendMessageInput{
DelaySeconds: nil,
MessageBody: awssdk.String(string(marshaled)),
QueueUrl: awssdk.String(config.AWS.SQS.QueueURL),
// MessageGroupId: aws.String("test"),
// MessageDeduplicationId: aws.String("test"),
}
できた! MessageGroupId
と MessageDeduplicationId
は FIFO キューでのみ指定できるプロパティだった
$ go run sqs.go
([]*sqs.SendMessageBatchResultEntry) (len=1 cap=1) {
(*sqs.SendMessageBatchResultEntry)(0xc0002ae4b0)({
Id: "id",
MD5OfMessageAttributes: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
MD5OfMessageBody: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
MessageId: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
})
}
MessageGroupId
The message group ID is the tag that specifies that a message belongs to a specific message group. Messages that belong to the same message group are always processed one by one, in a strict order relative to the message group (however, messages that belong to different message groups might be processed out of order).1
メッセージが複数種類あるとき、メッセージの種別ごとに特定の MessageGroupId を指定すれば、同じグループに所属するメッセージ内で順序が保証される。 特にグループ分けする必要がなければ、適当な固定値をセットすれば OK。