### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

I have an application which uses SQS.
It works in production.
It has acceptance tests which were passing with localstack until very recently.

Now I see:

```
An error occurred (InvalidParameterValue) when calling the SendMessage operation: Value 0 for parameter DelaySeconds is invalid. Reason: The request include parameter that is not valid for this queue type.
```

Yes, delay `0` is being passed in to `send_message` but this used to work in both localstack and AWS.

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sqs.html#SQS.Client.send_message

> DelaySeconds (integer) --
The length of time, in seconds, for which to delay a specific message. Valid values: 0 to 900. 

### Expected Behavior

DelaySeconds 0 is a valid value.

sqs send_message works when explicitly setting delay 0.

### 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 run localstack/localstack

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

1. Create a SQS FIFO queue.
2. Try to `send_message`, specifying `DelaySeconds=0`

### Environment

```markdown
- OS: macos
- LocalStack: latest
```


### Anything else?

I notice on a recent issue that @thrau said he recently changed how SQS attribute values are validated.
return "".join(random.choice(string.digits) for _ in range(20))
# Method from moto's attribute_md5 of moto/sqs/models.py, separated from the Message Object
def _create_message_attribute_hash(message_attributes) -> Optional[str]:
    # To 
    if not isinstance(message_attributes, dict):
        return
    hash = hashlib.md5()
    for attrName in sorted(message_attributes.keys()):
        attr_value = message_attributes[attrName]
        # En
        MotoMessage.update_binary_length_and_value(hash, MotoMessage.utf8(attrName))
        # En
        MotoMessage.update_binary_length_and_value(hash, MotoMessage.utf8(attr_value["DataType"]))
        # En
        if attr_value.get("StringValue"):
            hash.update(bytearray([STRING_TYPE_FIELD_INDEX]))
            MotoMessage.update_binary_length_and_value(
                hash, MotoMessage.utf8(attr_value.get("StringValue"))
            )
        elif attr_value.get("BinaryValue"):
            hash.update(bytearray([BINARY_TYPE_FIELD_INDEX]))
            decoded_binary_value = base64.b64decode(attr_value.get("BinaryValue"))
            MotoMessage.update_binary_length_and_value(hash, decoded_binary_value)
        # st
        # Se
    return hash.hexdigest()
def get_queue_name_from_url(queue_url: str) -> str: