private void Reconnect() { try { _connection.Dispose(); } catch (Exception) { Logger.Info("Error Dispose durante la reconexion, se procede a la reconexion"); } _connection = _connectionProvider.Connect(); CreateBasicConsumer(); }
public async Task PublishAsync(IReadOnlyCollection <RabbitMqMessage> rabbitMqMessages, CancellationToken cancellationToken) { var uri = _configuration.Uri; IRabbitConnection rabbitConnection = null; try { rabbitConnection = await GetRabbitMqConnectionAsync(uri, cancellationToken).ConfigureAwait(false); await _transientFaultHandler.TryAsync( c => rabbitConnection.WithModelAsync(m => PublishAsync(m, rabbitMqMessages), c), Label.Named("rabbitmq-publish"), cancellationToken) .ConfigureAwait(false); } catch (OperationCanceledException) { throw; } catch (Exception e) { if (rabbitConnection != null) { using (await _asyncLock.WaitAsync(CancellationToken.None).ConfigureAwait(false)) { rabbitConnection.Dispose(); _connections.Remove(uri); } } _log.Error(e, "Failed to publish domain events to RabbitMQ"); throw; } }
public async Task SubscribeAsync(string exchange, string queue, Action <IList <IDomainEvent>, IDomainEventPublisher> action, IDomainEventPublisher domainEventPublisher, CancellationToken cancellationToken) { Uri uri = _configuration.Uri; IRabbitConnection rabbitConnection = null; try { rabbitConnection = await GetRabbitMqConnectionAsync(uri, cancellationToken).ConfigureAwait(false); await _transientFaultHandler.TryAsync( c => rabbitConnection.WithModelAsync(m => SubscribeAsync(m, exchange, queue, action, domainEventPublisher, c), c), Label.Named("rabbitmq-subscribe"), cancellationToken) .ConfigureAwait(false); } catch (OperationCanceledException) { throw; } catch (Exception e) { if (rabbitConnection != null) { using (await _asyncLock.WaitAsync(CancellationToken.None).ConfigureAwait(false)) { rabbitConnection.Dispose(); _connections.Remove(uri); } } _log.Error(e, "Failed to subscribe to RabbitMQ"); throw; } }
public async Task SubscribeAsync(string exchange, string queue, Action <IList <IDomainEvent>, IDomainEventPublisher> action, IDomainEventPublisher domainEventPublisher, CancellationToken cancellationToken) { Uri uri = _configuration.Uri; IRabbitConnection rabbitConnection = null; try { rabbitConnection = await GetRabbitMqConnectionAsync(uri, cancellationToken).ConfigureAwait(false); await rabbitConnection.WithModelAsync(model => { model.ExchangeDeclare(exchange, ExchangeType.Fanout); model.QueueDeclare(queue, false, false, true, null); model.QueueBind(queue, exchange, ""); var consume = new EventingBasicConsumer(model); consume.Received += (obj, @event) => { var msg = CreateRabbitMqMessage(@event); var domainEvent = _eventJsonSerializer.Deserialize(msg.Message, new Metadata(msg.Headers)); _dispatchToEventSubscribers.DispatchToAsynchronousSubscribersAsync(domainEvent, cancellationToken); }; model.BasicConsume(queue, false, consume); return(Task.CompletedTask); }, cancellationToken); } catch (OperationCanceledException) { throw; } catch (Exception e) { if (rabbitConnection != null) { using (await _asyncLock.WaitAsync(CancellationToken.None).ConfigureAwait(false)) { rabbitConnection.Dispose(); _connections.Remove(uri); } } _log.Error(e, "Failed to subscribe to RabbitMQ"); throw; } }
public void Dispose() => rabbitConnection?.Dispose();