### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

1. Send messages to a FIFO queue
2. Receive multiple messages (3 in the example)
3. Wait for visibility timeout
4. Receive messages again
5. Messages are received out of order

### Expected Behavior

According to https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-understanding-logic.html
> If the consumer detects a failed ReceiveMessage action, it can retry as many times as necessary, using the same receive request attempt ID. Assuming that the consumer receives at least one acknowledgement before the visibility timeout expires, multiple retries don't affect the ordering of messages.

I wasn't using Attempt ID. But based on testing on an actual AWS SQS FIFO queue, the order of messages was still preserved.

### How are you starting LocalStack?

With a docker-compose file

### Steps To Reproduce

#### How are you starting localstack (e.g., `bin/localstack` command, arguments, or `docker-compose.yml`)

```yaml
version: '2.1'

services:
  localstack:
    container_name: "${LOCALSTACK_DOCKER_NAME-localstack_main}"
    image: localstack/localstack
    ports:
      - "4566-4599:4566-4599"
      - "${PORT_WEB_UI-8080}:${PORT_WEB_UI-8080}"
    environment:
      - SERVICES=s3,sqs
      - DEBUG=${DEBUG- }
      - DATA_DIR=${DATA_DIR- }
      - PORT_WEB_UI=${PORT_WEB_UI- }
      - LAMBDA_EXECUTOR=${LAMBDA_EXECUTOR- }
      - KINESIS_ERROR_PROBABILITY=${KINESIS_ERROR_PROBABILITY- }
      - DOCKER_HOST=unix:///var/run/docker.sock
      - HOST_TMP_FOLDER=${TMPDIR-/tmp/localstack}
    volumes:
      - "${TMPDIR:-/tmp/localstack}:/tmp/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"
```

    docker-compose up

#### Client commands (e.g., AWS SDK code snippet, or sequence of "awslocal" commands)

(save as `create_queue.sh`)
```sh
#!/usr/bin/env bash

[[ -n "$1" ]] && AWS_HOST="$1" || AWS_HOST="localhost"

DEFAULT_SQS_ATTRS='{ "MessageRetentionPeriod": "10800", "ReceiveMessageWaitTimeSeconds": "10", "VisibilityTimeout": "900", "ContentBasedDeduplication": "true" }'
function create_queue() {
    local region="$1"
    local name="$2"
    local dlq="$3"
    local max_recv="$4"
    local vis_timeout="$5"
    [[ -n "$dlq" ]] && dlq="-DLQ"

    local sqs_attributes
    local fifo=""
    if [[ "$name" == *".fifo" ]]; then
        sqs_attributes="$(jq -r -c '.FifoQueue = "true"' <<<"$DEFAULT_SQS_ATTRS")"
        name="${name/.fifo/}"
        fifo=".fifo"
    else
        sqs_attributes="$DEFAULT_SQS_ATTRS"
    fi
    if [[ -n "$vis_timeout" ]]; then
        sqs_attributes="$(jq -r -c --arg vis_timeout "$vis_timeout" '.VisibilityTimeout = $vis_timeout' <<<"$sqs_attributes")"
    fi

    local redrive_policy='{ "maxReceiveCount": "5" }'
    if [[ -n "$max_recv" ]]; then
        redrive_policy="$(jq -r -c --arg max_recv "$max_recv" '.maxReceiveCount = $max_recv' <<<"$redrive_policy")"
    fi
    if [[ -n "$dlq" ]]; then
        aws --endpoint-url="http://$AWS_HOST:4566" --region "$region" sqs create-queue --queue-name "$name$dlq$fifo" --attributes "$sqs_attributes"
        redrive_policy="$(jq -r -c "$(printf '.deadLetterTargetArn = "arn:aws:sqs:%s:000000000000:%s-DLQ%s"' "$region" "$name" "$fifo")" <<<"$redrive_policy")"
        sqs_attributes="$(jq -r -c --arg policy "$redrive_policy" '.RedrivePolicy = $policy' <<<"$sqs_attributes")"
    fi
    aws --endpoint-url="http://$AWS_HOST:4566" --region "$region" sqs create-queue --queue-name "$name$fifo" --attributes "$sqs_attributes"
}
```

```sh
$ . ./create_queue.sh
$ create_queue us-east-1 test1.fifo 1 50 60
{
    "QueueUrl": "http://$AWS_HOST:4566/000000000000/test1-DLQ.fifo"
}
{
    "QueueUrl": "http://$AWS_HOST:4566/000000000000/test1.fifo"
}
$ aws --endpoint-url=http://$AWS_HOST:4566 sqs get-queue-attributes --queue-url http://$AWS_HOST:4566/000000000000/test1.fifo
{
    "Attributes": {
        "ApproximateNumberOfMessages": "0",
        "ApproximateNumberOfMessagesDelayed": "0",
        "ApproximateNumberOfMessagesNotVisible": "0",
        "CreatedTimestamp": "1626137940.978319",
        "DelaySeconds": "0",
        "LastModifiedTimestamp": "1626137940.978319",
        "MaximumMessageSize": "262144",
        "MessageRetentionPeriod": "10800",
        "QueueArn": "arn:aws:sqs:us-east-1:000000000000:test1.fifo",
        "RedrivePolicy": "{\"maxReceiveCount\":50,\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-1:000000000000:test1-DLQ.fifo\"}",
        "ReceiveMessageWaitTimeSeconds": "10",
        "VisibilityTimeout": "60",
        "FifoQueue": "true",
        "ContentBasedDeduplication": "true"
    }
}
$ aws --endpoint-url=http://$AWS_HOST:4566 sqs send-message --queue-url http://$AWS_HOST:4566/000000000000/test1.fifo --message-body '{"foo": "bar4"}' --message-group-id 'helloworld'
{
    "MD5OfMessageBody": "e600d75d2e7c74c5c2299fab1762bc50",
    "MessageId": "0fb8fe29-6b73-aa21-f845-03bdac37150a"
}
$ aws --endpoint-url=http://$AWS_HOST:4566 sqs send-message --queue-url http://$AWS_HOST:4566/000000000000/test1.fifo --message-body '{"foo": "bar5"}' --message-group-id 'helloworld'
{
    "MD5OfMessageBody": "bbc312e807f097092fbaa4ea30859c5e",
    "MessageId": "5a529b21-53e9-0154-05df-cfafd5c96e6e"
}
$ aws --endpoint-url=http://$AWS_HOST:4566 sqs send-message --queue-url http://$AWS_HOST:4566/000000000000/test1.fifo --message-body '{"foo": "bar6"}' --message-group-id 'helloworld'
{
    "MD5OfMessageBody": "21b93ade231a56d0babcd3f4100a060e",
    "MessageId": "9dc8d2c8-ccf7-ae90-bc40-1039fac2376c"
}
$ aws --endpoint-url=http://$AWS_HOST:4566 sqs receive-message --queue-url http://$AWS_HOST:4566/000000000000/test1.fifo --attribute-names All --message-attribute-names All --max-number-of-messages 10
{
    "Messages": [
        {
            "MessageId": "0fb8fe29-6b73-aa21-f845-03bdac37150a",
            "ReceiptHandle": "kfzfupygrguevwxpmoqewrajxtrpuedcptmmxsnqbchlczneuduxpwtnntibfqzgnkbbqwjjukghgfgjloicgpylulswbrtihdhmfzracmfsvuygczwaakuxfoeecduzoaxbslnxdbjgrivpblnzmienvtuycsvfxawnffacxmbpgssteoopsslmx",
            "MD5OfBody": "e600d75d2e7c74c5c2299fab1762bc50",
            "Body": "{\"foo\": \"bar4\"}",
            "Attributes": {
                "SenderId": "AIDAIT2UOQQY3AUEKVGXU",
                "SentTimestamp": "1626138003146",
                "ApproximateReceiveCount": "1",
                "ApproximateFirstReceiveTimestamp": "1626138037904",
                "MessageDeduplicationId": "e03bde47f4d505a2b7d6cc082e0424fed2fad73c67f0f16d0602db4d49dd0fc4",
                "MessageGroupId": "helloworld"
            }
        },
        {
            "MessageId": "5a529b21-53e9-0154-05df-cfafd5c96e6e",
            "ReceiptHandle": "cbecbinornqpeegsesrpukgnitwnuzspyxrfgzzauzwcgsqsgdcsicfjsepnqxggokhtqildwmjltsuvgjtbkvtkgnqvojgsqzljlkjabyeobwbcanftyqfopuxqnqebudxunjnsnkfydifhfdjbijteenqjyylgzdercbcvsknxrkalxkeksvcaa",
            "MD5OfBody": "bbc312e807f097092fbaa4ea30859c5e",
            "Body": "{\"foo\": \"bar5\"}",
            "Attributes": {
                "SenderId": "AIDAIT2UOQQY3AUEKVGXU",
                "SentTimestamp": "1626138007641",
                "ApproximateReceiveCount": "1",
                "ApproximateFirstReceiveTimestamp": "1626138037905",
                "MessageDeduplicationId": "ee6e00124d6352962c5ad9bd21738086b814eec5b739da18c3aaa7ebe66d9aea",
                "MessageGroupId": "helloworld"
            }
        },
        {
            "MessageId": "9dc8d2c8-ccf7-ae90-bc40-1039fac2376c",
            "ReceiptHandle": "rgfhtlxitiwmhuqqbwmxlossabddczvqjkwaznvknusxqrokfndqokcewkkmztmimgkpyvvmqynnpmjvjyksoymnohxitznkwnrpfxlusjtsijbvncbqwtidxfweorzvnqkjwyzurkjqnxcmsojfqwdvoquckhwtexmuoplqetvksssxtniwhfrhx",
            "MD5OfBody": "21b93ade231a56d0babcd3f4100a060e",
            "Body": "{\"foo\": \"bar6\"}",
            "Attributes": {
                "SenderId": "AIDAIT2UOQQY3AUEKVGXU",
                "SentTimestamp": "1626138011355",
                "ApproximateReceiveCount": "1",
                "ApproximateFirstReceiveTimestamp": "1626138037906",
                "MessageDeduplicationId": "606514bb7bae1a6bdde8176c07d192b8d7d596c8b33cd611afaf5fc53f2c00f4",
                "MessageGroupId": "helloworld"
            }
        }
    ]
}
$ aws --endpoint-url=http://$AWS_HOST:4566 sqs receive-message --queue-url http://$AWS_HOST:4566/000000000000/test1.fifo --attribute-names All --message-attribute-names All --max-number-of-messages 10
{
    "Messages": [
        {
            "MessageId": "9dc8d2c8-ccf7-ae90-bc40-1039fac2376c",
            "ReceiptHandle": "jdbonffjtigvdhabkbyhebzxthmoyqpjcicylxsufullmsjkywvrkwejyvpddaswmvznkggrbflcaoqhayhokflzfastgvwltmyjuhwbpaslbvguagnojvmmvqoxwoehwtpfwesjkpbotpqawggysosqwtpkircawnehpzxustijeyhpezrutifwa",
            "MD5OfBody": "21b93ade231a56d0babcd3f4100a060e",
            "Body": "{\"foo\": \"bar6\"}",
            "Attributes": {
                "SenderId": "AIDAIT2UOQQY3AUEKVGXU",
                "SentTimestamp": "1626138011355",
                "ApproximateReceiveCount": "2",
                "ApproximateFirstReceiveTimestamp": "1626138037906",
                "MessageDeduplicationId": "606514bb7bae1a6bdde8176c07d192b8d7d596c8b33cd611afaf5fc53f2c00f4",
                "MessageGroupId": "helloworld"
            }
        }
    ]
}
```

### Environment

```markdown
- OS: Arch Linux
- LocalStack version: 0.12.15
- LocalStack build date: 2021-07-12
- LocalStack build git hash: 01e81ec3
```


### Anything else?

_No response_
)
        snapshot.match("sse_kms_attributes", response)
        # SQ
        queue_url = sqs_create_queue()
        attributes = {
            "SqsManagedSseEnabled": "true",
        }
        sqs_client.set_queue_attributes(QueueUrl=queue_url, Attributes=attributes)
        response = sqs_client.get_queue_attributes(
            QueueUrl=queue_url,
            AttributeNames=[
                "KmsMasterKeyId",
                "KmsDataKeyReusePeriodSeconds",
                "SqsManagedSseEnabled",
            ],
        )
        snapshot.match("sse_sqs_attributes", response)
    @pytest.mark.xfail(reason="validation currently not implemented in localstack")
    @pytest.mark.aws_validated
    def test_sse_kms_and_sqs_are_mutually_exclusive(self, sqs_client, sqs_create_queue, snapshot):
        queue_url = sqs_create_queue()
        attributes = {
            "KmsMasterKeyId": "testKeyId",
            "SqsManagedSseEnabled": "true",
        }
        with pytest.raises(ClientError) as e:
            sqs_client.set_queue_attributes(QueueUrl=queue_url, Attributes=attributes)
        snapshot.match("error", e.value)
    @pytest.mark.aws_validated
    def test_receive_message_message_attribute_names_filters(