/// <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(); }
/// <summary> /// Initializes a new instance of the <see cref="Producer"/> class. /// </summary> /// <param name="endpoint"> /// The endpoint. /// </param> /// <param name="connection"> /// Соединение с шиной сообщений /// </param> /// <param name="label"> /// Метка сообщения, которая будет использоваться при отправлении сообщений. /// </param> /// <param name="routeResolver"> /// Определитель маршрутов, по которым можно отсылать и получать сообщения. /// </param> /// <param name="confirmationIsRequired"> /// Если <c>true</c> - тогда отправитель будет ожидать подтверждения о том, что сообщение было сохранено в брокере. /// </param> public Producer(IEndpoint endpoint, IRabbitConnection connection, MessageLabel label, IRouteResolver routeResolver, bool confirmationIsRequired) { this.endpoint = endpoint; this.Channel = connection.OpenChannel(); this.BrokerUrl = connection.ConnectionString; this.logger = LogManager.GetLogger($"{this.GetType().FullName}(URL={this.BrokerUrl})"); 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); } }
/// <summary> /// Запускает отправитель, после этого можно получать ответы на запросы. /// </summary> public void Start() { try { this.logger.Trace($"Starting producer [{this.GetHashCode()}] of [{this.Label}]"); this.slimLock.EnterWriteLock(); this.cancellationTokenSource = new CancellationTokenSource(); var token = this.cancellationTokenSource.Token; this.Channel = this.connection.OpenChannel(token); this.Channel.Shutdown += this.OnChannelShutdown; if (this.ConfirmationIsRequired) { this.confirmationTracker = new PublishConfirmationTracker(this.Channel); this.Channel.EnablePublishConfirmation(); this.Channel.OnConfirmation(this.confirmationTracker.HandleConfirmation); } this.CallbackListener?.StartConsuming(); this.logger.Trace($"Producer of [{this.Label}] started successfully"); } finally { try { this.slimLock.ExitWriteLock(); } catch (Exception) { // Suppress all errors } } }
/// <summary> /// Запускает отправитель, после этого можно получать ответы на запросы. /// </summary> public void Start() { lock (this.syncRoot) { this.logger.Trace($"Starting producer [{this.GetHashCode()}] of [{this.Label}]"); this.cancellationTokenSource = new CancellationTokenSource(); var token = this.cancellationTokenSource.Token; this.Channel = this.connection.OpenChannel(token); this.Channel.Shutdown += this.OnChannelShutdown; if (this.ConfirmationIsRequired) { this.confirmationTracker = new PublishConfirmationTracker(this.Channel); this.Channel.EnablePublishConfirmation(); this.Channel.OnConfirmation(this.confirmationTracker.HandleConfirmation); } this.CallbackListener?.StartConsuming(); this.logger.Trace($"Producer of [{this.Label}] started successfully"); } }