code: def ack(self, message):
      # assume consumer is alive
      try:
          self._consumer_receive.acknowledge(message)
          self._latest_confirmed = message
  
          if self._first_confirmed is None:
              self._first_confirmed = message
      except Exception as e:
          LOGGER.debug("meet {} when trying to ack message".format(e))
          self._get_or_create_consumer()
          self._consumer_receive.negative_acknowledge(message)
  
file_path: FATE/python/fate/arch/federation/backends/pulsar/_mq_channel.py
imports: import logging
  import pulsar
  from fate.arch.federation.message_queue import nretry
label_desc: Use image node_id 4 for calling the MQChannel obj's underlying member method code with example usage: obj.ack(message) without return types