docs: def start(self):
          '''
          Listen to messages and publish them.
          '''
          # metrics
          napalm_logs_publisher_received_messages = Counter(
              'napalm_logs_publisher_received_messages',
              "Count of messages received by the publisher",
              ['publisher_type', 'address', 'port']
          )
          napalm_logs_publisher_whitelist_blacklist_check_fail = Counter(
              'napalm_logs_publisher_whitelist_blacklist_check_fail',
              "Count of messages which fail the whitelist/blacklist check",
              ['publisher_type', 'address', 'port']
          )
          napalm_logs_publisher_messages_published = Counter(
              'napalm_logs_publisher_messages_published',
              "Count of published messages",
              ['publisher_type', 'address', 'port']
          )
          self._setup_ipc()
          # Start suicide polling thread
          thread = threading.Thread(target=self._suicide_when_without_parent, args=(os.getppid(),))
          thread.start()
          signal.signal(signal.SIGTERM, self._exit_gracefully)
          self.transport.start()
          self.__up = True
          while self.__up:
              try:
                  bin_obj = self.sub.recv()
              except zmq.ZMQError as error:
                  if self.__up is False:
                      log.info('Exiting on process shutdown')
                      return
                  else:
                      log.error(error, exc_info=True)
                      raise NapalmLogsExit(error)
              obj = umsgpack.unpackb(bin_obj)
              if self._strip_message_details:
                  obj.pop('message_details', None)
                  bin_obj = self.serializer_fun(obj)
              napalm_logs_publisher_received_messages.labels(
                  publisher_type=self._transport_type,
                  address=self.address,
                  port=self.port
              ).inc()
              if not napalm_logs.ext.check_whitelist_blacklist(obj['error'],
                                                               whitelist=self.error_whitelist,
                                                               blacklist=self.error_blacklist):
                  # Apply the whitelist / blacklist logic
                  # If it doesn't match, jump over.
                  log.debug('This error type is %s. Skipping for %s #%d',
                            obj['error'],
                            self._transport_type,
                            self.pub_id)
                  napalm_logs_publisher_whitelist_blacklist_check_fail.labels(
                      publisher_type=self._transport_type,
                      address=self.address,
                      port=self.port
                  ).inc()
                  continue
              serialized_obj = self._serialize(obj, bin_obj)
              log.debug('Publishing the OC object')
              if not self.disable_security and self.__transport_encrypt:
                  # Encrypt only when needed.
                  serialized_obj = self._prepare(serialized_obj)
              self.transport.publish(serialized_obj)
              napalm_logs_publisher_messages_published.labels(
                  publisher_type=self._transport_type,
                  address=self.address,
                  port=self.port
              ).inc()