public static TopicMessageType getMessageType(SendMessageRequestHeader requestHeader) {
        Map<String, String> properties = MessageDecoder.string2messageProperties(requestHeader.getProperties());
        String traFlag = properties.get(MessageConst.PROPERTY_TRANSACTION_PREPARED);
        TopicMessageType topicMessageType = TopicMessageType.NORMAL;
        if (Boolean.parseBoolean(traFlag)) {
            topicMessageType = TopicMessageType.TRANSACTION;
        } else if (properties.containsKey(MessageConst.PROPERTY_SHARDING_KEY)) {
            topicMessageType = TopicMessageType.FIFO;
        } else if (properties.get("__STARTDELIVERTIME") != null
            || properties.get(MessageConst.PROPERTY_DELAY_TIME_LEVEL) != null
            || properties.get(MessageConst.PROPERTY_TIMER_DELIVER_MS) != null
            || properties.get(MessageConst.PROPERTY_TIMER_DELAY_SEC) != null
            || properties.get(MessageConst.PROPERTY_TIMER_DELAY_MS) != null) {
            topicMessageType = TopicMessageType.DELAY;
        }
        return topicMessageType;
    }
@Test
    public void testGetMessageTypeWithMultipleProperties() {
        SendMessageRequestHeader requestHeader = new SendMessageRequestHeader();
        Map<String, String> map = new HashMap<>();
        map.put(MessageConst.PROPERTY_DELAY_TIME_LEVEL, "1");
        map.put(MessageConst.PROPERTY_SHARDING_KEY, "shardingKey");
        requestHeader.setProperties(MessageDecoder.messageProperties2String(map));

        TopicMessageType result = BrokerMetricsManager.getMessageType(requestHeader);
        assertThat(TopicMessageType.FIFO).isEqualTo(result);
    }