docs: private static MQProperties buildMQProperties(Properties properties) {
          MQProperties mqProperties = new MQProperties();
          String servers = CanalController.getProperty(properties, CanalConstants.CANAL_MQ_SERVERS);
          if (!StringUtils.isEmpty(servers)) {
              mqProperties.setServers(servers);
          }
          String retires = CanalController.getProperty(properties, CanalConstants.CANAL_MQ_RETRIES);
          if (!StringUtils.isEmpty(retires)) {
              mqProperties.setRetries(Integer.valueOf(retires));
          }
          String batchSize = CanalController.getProperty(properties, CanalConstants.CANAL_MQ_BATCHSIZE);
          if (!StringUtils.isEmpty(batchSize)) {
              mqProperties.setBatchSize(Integer.valueOf(batchSize));
          }
          String lingerMs = CanalController.getProperty(properties, CanalConstants.CANAL_MQ_LINGERMS);
          if (!StringUtils.isEmpty(lingerMs)) {
              mqProperties.setLingerMs(Integer.valueOf(lingerMs));
          }
          String maxRequestSize = CanalController.getProperty(properties, CanalConstants.CANAL_MQ_MAXREQUESTSIZE);
          if (!StringUtils.isEmpty(maxRequestSize)) {
              mqProperties.setMaxRequestSize(Integer.valueOf(maxRequestSize));
          }
          String bufferMemory = CanalController.getProperty(properties, CanalConstants.CANAL_MQ_BUFFERMEMORY);
          if (!StringUtils.isEmpty(bufferMemory)) {
              mqProperties.setBufferMemory(Long.valueOf(bufferMemory));
          }
          String canalBatchSize = CanalController.getProperty(properties, CanalConstants.CANAL_MQ_CANALBATCHSIZE);
          if (!StringUtils.isEmpty(canalBatchSize)) {
              mqProperties.setCanalBatchSize(Integer.valueOf(canalBatchSize));
          }
          String canalGetTimeout = CanalController.getProperty(properties, CanalConstants.CANAL_MQ_CANALGETTIMEOUT);
          if (!StringUtils.isEmpty(canalGetTimeout)) {
              mqProperties.setCanalGetTimeout(Long.valueOf(canalGetTimeout));
          }
          String flatMessage = CanalController.getProperty(properties, CanalConstants.CANAL_MQ_FLATMESSAGE);
          if (!StringUtils.isEmpty(flatMessage)) {
              mqProperties.setFlatMessage(Boolean.valueOf(flatMessage));
          }
          String compressionType = CanalController.getProperty(properties, CanalConstants.CANAL_MQ_COMPRESSION_TYPE);
          if (!StringUtils.isEmpty(compressionType)) {
              mqProperties.setCompressionType(compressionType);
          }
          String acks = CanalController.getProperty(properties, CanalConstants.CANAL_MQ_ACKS);
          if (!StringUtils.isEmpty(acks)) {
              mqProperties.setAcks(acks);
          }
          String aliyunAccessKey = CanalController.getProperty(properties, CanalConstants.CANAL_ALIYUN_ACCESSKEY);
          if (!StringUtils.isEmpty(aliyunAccessKey)) {
              mqProperties.setAliyunAccessKey(aliyunAccessKey);
          }
          String aliyunSecretKey = CanalController.getProperty(properties, CanalConstants.CANAL_ALIYUN_SECRETKEY);
          if (!StringUtils.isEmpty(aliyunSecretKey)) {
              mqProperties.setAliyunSecretKey(aliyunSecretKey);
          }
          String transaction = CanalController.getProperty(properties, CanalConstants.CANAL_MQ_TRANSACTION);
          if (!StringUtils.isEmpty(transaction)) {
              mqProperties.setTransaction(Boolean.valueOf(transaction));
          }
  
          String producerGroup = CanalController.getProperty(properties, CanalConstants.CANAL_MQ_PRODUCERGROUP);
          if (!StringUtils.isEmpty(producerGroup)) {
              mqProperties.setProducerGroup(producerGroup);
          }
  
          for (Object key : properties.keySet()) {
              key = StringUtils.trim(key.toString());
              if (((String) key).startsWith(CanalConstants.CANAL_MQ_PROPERTIES)) {
                  String value = CanalController.getProperty(properties, (String) key);
                  String subKey = ((String) key).substring(CanalConstants.CANAL_MQ_PROPERTIES.length() + 1);
                  mqProperties.getProperties().put(subKey, value);
              }
          }
  
          return mqProperties;
      }