code: def publish(message, exchange=None):
      
      pre_publish_signal.send(publish, message=message)
  
      if exchange is None:
          exchange = config.conf["publish_exchange"]
  
      global _session_cache
      if not hasattr(_session_cache, "session"):
          _session_cache.session = _session.PublisherSession()
  
      try:
          _session_cache.session.publish(message, exchange=exchange)
          publish_signal.send(publish, message=message)
      except exceptions.PublishException as e:
          publish_failed_signal.send(publish, message=message, reason=e)
          raise
docs: Publish a message to an exchange.
  
      This is a synchronous call, meaning that when this function returns, an
      acknowledgment has been received from the message broker and you can be
      certain the message was published successfully.
  
      There are some cases where an error occurs despite your message being
      successfully published. For example, if a network partition occurs after
      the message is received by the broker. Therefore, you may publish duplicate
      messages. For complete details, see the :ref:`publishing` documentation.
  
      >>> from fedora_messaging import api
      >>> message = api.Message(body={'Hello': 'world'}, topic='Hi')
      >>> api.publish(message)
  
      If an attempt to publish fails because the broker rejects the message, it
      is not retried. Connection attempts to the broker can be configured using
      the "connection_attempts" and "retry_delay" options in the broker URL. See
      :class:`pika.connection.URLParameters` for details.
  
      Args:
          message (message.Message): The message to publish.
          exchange (str): The name of the AMQP exchange to publish to; defaults to
              :ref:`conf-publish-exchange`
  
      Raises:
          fedora_messaging.exceptions.PublishReturned: Raised if the broker rejects the
              message.
          fedora_messaging.exceptions.ConnectionException: Raised if a connection error
              occurred before the publish confirmation arrived.
          fedora_messaging.exceptions.ValidationError: Raised if the message
              fails validation with its JSON schema. This only depends on the
              message you are trying to send, the AMQP server is not involved.