/// <summary>
/// Инициализирует новый экземпляр класса <see cref="Producer"/>.
/// </summary>
/// <param name="bus">
/// Конечная точка, для которой создается отправитель.
/// </param>
/// <param name="label">
/// Метка сообщения, которая будет использоваться при отправлении сообщений.
/// </param>
/// <param name="routeResolver">
/// Определитель маршрутов, по которым можно отсылать и получать сообщения.
/// </param>
/// <param name="confirmationIsRequired">
/// Если <c>true</c> - тогда отправитель будет ожидать подтверждения о том, что сообщение было сохранено в брокере.
/// </param>
public Producer(RabbitBus bus, MessageLabel label, IRouteResolver routeResolver, bool confirmationIsRequired)
{
this.Channel = bus.OpenChannel();
this.Label = label;
this.RouteResolver = routeResolver;
this.ConfirmationIsRequired = confirmationIsRequired;
if (this.ConfirmationIsRequired)
{
this.confirmationTracker = new DefaultPublishConfirmationTracker(this.Channel);
this.Channel.EnablePublishConfirmation();
this.Channel.OnConfirmation(this.confirmationTracker.HandleConfirmation);
}
this.Failed += _ => ((IBusAdvanced)bus).Panic();
}