SQS - FIFOキューの重複排除ID

簡単に言うと、同一の重複排除IDが設定されたメッセージをキューへ送っても5分間の間は受付けられないということです。

**参考**
[Amazon SQS メッセージ重複排除 ID の使用](https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/using-messagededuplicationid-property.html)



#■やってみる#

FIFOキューを選択し、「コンテンツに基づく重複削除」にチェックを入れる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/2fff8312-e8d4-132f-a084-bba9ce9bb1a2.png)


「コンテンツに基づく重複削除」にチェックを入れた場合。
→メッセージ重複削除IDの自前作成は不要になります。勝手にSHA256でハッシュ化して付与してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/2698f0e1-34cd-9159-3894-18c3c3c7c78b.png)

「コンテンツに基づく重複削除」にチェックを入れない場合。
→メッセージ重複削除IDの自前作成が必要となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/f0f84234-2dc4-4d5d-c239-479420b72d80.png)



#■CLIからテストしてみる1#

1件メッセージを送る。

```
$ aws sqs send-message --queue-url https://sqs.ap-northeast-1.amazonaws.com/12345678901/test.fifo --region ap-northeast-1 --message-body hello10 --message-group-id group10
{
    "MD5OfMessageBody": "75628fce248a7e55e27335a60900ebab",
    "SequenceNumber": "18850343785178351616",
    "MessageId": "30d4d2ee-286d-40e9-ada0-ad5936236d56"
}
```

同じものを時間をおかず1件送る。

```
$ aws sqs send-message --queue-url https://sqs.ap-northeast-1.amazonaws.com/12345678901/test.fifo --region ap-northeast-1 --message-body hello10 --message-group-id group10
{
    "MD5OfMessageBody": "75628fce248a7e55e27335a60900ebab",
    "SequenceNumber": "18850343785178351616",
    "MessageId": "30d4d2ee-286d-40e9-ada0-ad5936236d56"
}
```

カウントしてみる。メッセージを2件入れたが、MessageId が同じだったので後から入ったものが削除され、1であることがわかる。

```
$ aws sqs get-queue-attributes --queue-url https://sqs.ap-northeast-1.amazonaws.com/12345678901/test.fifo --region ap-northeast-1 --attribute-names ApproximateNumberOfMessages
{
    "Attributes": {
        "ApproximateNumberOfMessages": "1"
    }
}
```

5分開けて再度おくってみる。

```
$ aws sqs send-message --queue-url https://sqs.ap-northeast-1.amazonaws.com/12345678901/test.fifo --region ap-northeast-1 --message-body hello10 --message-group-id group10
{
    "MD5OfMessageBody": "75628fce248a7e55e27335a60900ebab",
    "SequenceNumber": "18850343963418863872",
    "MessageId": "eba22523-2b07-45ee-ad14-32cb5ddc6132"
}
```

MessageIdが異なるので1であることがわかる。

```
$ aws sqs get-queue-attributes --queue-url https://sqs.ap-northeast-1.amazonaws.com/12345678901/test.fifo --region ap-northeast-1 --attribute-names ApproximateNumberOfMessages
{
    "Attributes": {
        "ApproximateNumberOfMessages": "2"
    }
}
```



#■CLIからテストしてみる2#

異なるbodyで、同じIDを使ってみる。

```
$ aws sqs send-message --queue-url https://sqs.ap-northeast-1.amazonaws.com/12345678901/test.fifo --region ap-northeast-1 --message-body hello100 --message-group-id group10
{
    "MD5OfMessageBody": "9a7108cfaa7f51efb5fcda9e9d4b7a90",
    "SequenceNumber": "18850344016894191872",
    "MessageId": "1d4bc1d6-004f-4047-8060-9dc75b47c753"
}

$ aws sqs send-message --queue-url https://sqs.ap-northeast-1.amazonaws.com/12345678901/test.fifo --region ap-northeast-1 --message-body hello200 --message-group-id group10
{
    "MD5OfMessageBody": "8d8ad303395dbd8d097a570c37000394",
    "SequenceNumber": "18850344018367215616",
    "MessageId": "6ed49a50-3b20-463e-9908-30c2e7f3e74d"
}

$ aws sqs send-message --queue-url https://sqs.ap-northeast-1.amazonaws.com/12345678901/test.fifo --region ap-northeast-1 --message-body hello300 --message-group-id group10
{
    "MD5OfMessageBody": "47d529b39d63df9f74aec6f33bab4fb4",
    "SequenceNumber": "18850344020316911616",
    "MessageId": "e7072129-a8d0-44f1-9b16-70037828ac50"
}
```

今度は先程のとあわせて5になっていることがわかります。

```
$ aws sqs get-queue-attributes --queue-url https://sqs.ap-northeast-1.amazonaws.com/12345678901/test.fifo --region ap-northeast-1 --attribute-names ApproximateNumberOfMessages
{
    "Attributes": {
        "ApproximateNumberOfMessages": "5"
    }
}
```



#■リンク#
[Amazon SQS](https://qiita.com/leomaro7/items/296c46ad6366a8dca28c)