public void Publish(Type messageType, EventBusMessage message) { _eventBusConnection.EnsureConnection(); var eventName = _manager.GetEventName(messageType); _logger.LogTrace($"Creating RabbitMQ channel to publish event: {message.MessageId} ({eventName})"); using (var channel = _eventBusConnection.CreateModel()) { _logger.LogTrace($"Declaring RabbitMQ exchange to publish event: {message.MessageId}"); var messageJson = JsonConvert.SerializeObject(message); var body = Encoding.UTF8.GetBytes(messageJson); createRetryPolicy(eventName, message.MessageId).Execute(() => { var properties = channel.CreateBasicProperties(); properties.DeliveryMode = 2; // persistent _logger.LogTrace($"Publishing event to RabbitMQ: {message.MessageId}"); channel.BasicPublish( exchange: _exchangeName, eventName, mandatory: true, basicProperties: properties, body: body); }); } }