### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

When calling `ReceiveMessage` on a FIFO queue, I _sometimes_ get HTTP 400 with the message: 

```
  [Aws\Sqs\Exception\SqsException]                                                                                                    
  Error executing "ReceiveMessage" on "http://localhost:4566/queue/us-west-2/000000000000/commands.fifo"; AWS HTTP error: Client er   
  ror: `POST http://localhost:4566/queue/us-west-2/000000000000/commands.fifo` resulted in a `400 Bad Request` response:              
  <?xml version='1.0' encoding='utf-8'?>                                                                                              
  <ErrorResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/"><Error><Code>Mi (truncated...)                                    
   MissingParameter (client): The request must contain the parameter MessageGroupId. - <?xml version='1.0' encoding='utf-8'?>         
  <ErrorResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/"><Error><Code>MissingParameter</Code><Message>The request must c   
  ontain the parameter MessageGroupId.</Message><Type>Sender</Type></Error><RequestId>88L3LXATEGVS0JF5S9BZDEQA95ELASZCKL4EJM5NCX9Y3   
  DHMP2RK</RequestId></ErrorResponse>  
```

There doesn't seem to be a particular pattern to it, and restarting localstack makes it go away. 

### Expected Behavior

`RecieveMessage` should never require a `MessageGroupId` parameter, because such a parameter [does not exist][1].

[1]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html

### 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`)

```
docker compose up -d
```

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

My calling code is (PHP SDK):

```php
        $options = [
            'QueueUrl' => $this->config->url,
            'WaitTimeSeconds' => 4,
            'MaxNumberOfMessages' => 10,
            'VisibilityTimeout' => 10,
        ];

        $result = $this->client->receiveMessage($options);
```

### Environment

```markdown
- OS: Mac OS 12.3
- LocalStack: 0.14.3
```


### Anything else?

_No response_
assert failed["Id"] == "9"
        assert failed["Code"] == "InvalidMessageContents"
        
        messages = []
        def collect_messages():
            response = sqs_client.receive_message(
                QueueUrl=queue_url, MaxNumberOfMessages=10, WaitTimeSeconds=1
            )
            messages.extend(response.get("Messages", []))
            return len(messages)
        assert poll_condition(
            lambda: collect_messages() >= 9, timeout=10
        ), f"gave up waiting messages, got {len(messages)} from 9"
        bodies = {message["Body"] for message in messages}
        assert bodies == {"0", "1", "2", "3", "4", "5", "6", "7", "8"}
    @pytest.mark.only_localstack
    def test_external_hostname(self, monkeypatch, sqs_client, sqs_create_queue):
        external_host = "external-host"
        external_port = "12345"
        monkeypatch.setattr(config, "SQS_ENDPOINT_STRATEGY", "off")
        monkeypatch.setattr(config, "SQS_PORT_EXTERNAL", external_port)
        monkeypatch.setattr(config, "HOSTNAME_EXTERNAL", external_host)
        queue_url = sqs_create_queue()
        assert f"{external_host}:{external_port}" in queue_url
        message_body = "external_host_test"
        sqs_client.send_message(QueueUrl=queue_url, MessageBody=message_body)
        receive_result = sqs_client.receive_message(QueueUrl=queue_url)
        assert receive_result["Messages"][0]["Body"] == message_body
    @pytest.mark.only_localstack
    def test_external_hostname_via_host_header(self, monkeypatch, sqs_create_queue):