public void Send(string address, RoutingType?routingType, Message message, CancellationToken cancellationToken)
        {
            CheckState();

            _sendObservable.PreSend(address, routingType, message);
            _producer.Send(address, routingType, message, cancellationToken);
            _sendObservable.PostSend(address, routingType, message);
        }
 public void Send(string address, RoutingType?routingType, Message message, CancellationToken cancellationToken)
 {
     while (true)
     {
         CheckClosed();
         try
         {
             _producer.Send(address, routingType, message, cancellationToken);
             return;
         }
         catch (ProducerClosedException)
         {
             HandleProducerClosed();
             Wait(cancellationToken);
             Log.RetryingSendAsync(Logger);
         }
     }
 }