public String getMessage(String key, String... params) {
        if (StringUtils.isBlank(key)) {
            return null;
        }
        StringBuilder sb = new StringBuilder();
        sb.append(getFormattedMessage(key));
        String msg = parseStringValue(sb.toString(), new HashSet<String>());
        if (params == null || params.length == 0) {
            return msg;
        }
        if (StringUtils.isBlank(msg)) {
            return msg;
        }
        return MessageFormat.format(msg, (Object[])params);
    }
@Test
    void testGetMessage() {
        ResourceBundleUtil resourceBundleUtil = ResourceBundleUtil.getInstance();
        String emptyKeyMsg = resourceBundleUtil.getMessage("", ErrorCode.ERR_CONFIG.getCode(),
            ErrorCode.ERR_CONFIG.getType());
        Assertions.assertNull(emptyKeyMsg);
        String errorConfigMsg = resourceBundleUtil.getMessage(ErrorCode.ERR_CONFIG.name(),
            ErrorCode.ERR_CONFIG.getCode(), ErrorCode.ERR_CONFIG.getType());
        Assertions.assertEquals("ERR-CODE: [Seata-1][ERR_CONFIG] config error, {0} More: [https://seata.apache"
            + ".org/docs/next/overview/faq#1]", errorConfigMsg);
        String errorConfigMsgWithParams = resourceBundleUtil.getMessage(ErrorCode.ERR_CONFIG.name(),
            ErrorCode.ERR_CONFIG.getCode(), ErrorCode.ERR_CONFIG.getType(), "vgroup_mapping_test");
        Assertions.assertEquals(
            "ERR-CODE: [Seata-1][ERR_CONFIG] config error, vgroup_mapping_test More: [https://seata.apache"
                + ".org/docs/next/overview/faq#1]", errorConfigMsgWithParams);
    }