def METHOD_NAME(
    self, queue_name: str, address: Optional[str] = None
) -> ZMQProducer:
    """Add a producer of a queue.
    A queue can have at most one producer attached to it.
    """
    if queue_name in self.producers:
        producer = self.producers[queue_name]
        if producer.alive:
            return producer
        address = producer.address
    elif queue_name in self.consumers:
        consumers = self.consumers[queue_name]
        connected_consumers = len(consumers)
        consumer = consumers[0] if connected_consumers > 0 else None
        address = consumer.address if consumer else None
    address = self._get_free_tcp_addr(self.host) if address is None else address
    producer = ZMQProducer(address=address, queue_name=queue_name)
    self.producers[queue_name] = producer
    return producer