private void sendSubAckMessage(final int packetId, final List<String> ackTopics, final Channel channel) {

        List<Integer> qos = new ArrayList<>();
        for (int i = 0; i < ackTopics.size(); i++) {
            // default qos 0
            qos.add(MqttQoS.AT_MOST_ONCE.value());
        }

        MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.SUBACK, false, AT_MOST_ONCE,
                false, 0);
        MqttSubAckPayload payload = new MqttSubAckPayload(qos);
        MqttSubAckMessage mqttSubAckMessage = new MqttSubAckMessage(fixedHeader, from(packetId), payload);
        channel.writeAndFlush(mqttSubAckMessage);
    }
call back request of message.
@param packetId packetId
@param ackTopics ackTopics
@param channel channel
shenyu-protocol/shenyu-protocol-mqtt/src/main/java/org/apache/shenyu/protocol/mqtt/Subscribe.java