public async Task <HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default) { try { EnsureConnection(context.Registration.Name); await _connection.Connect(); _connection.Dispose(); return(await Task.FromResult(HealthCheckResult.Healthy("RabittMQ is Healthy"))); } catch (Exception ex) { return(await Task.FromResult(HealthCheckResult.Unhealthy("RabittMQ is Unhealthy", ex))); } }
private IModel CreateConsumerChannel() { if (!_connection.IsConnected) { _connection.Connect(); } var channel = _connection.CreateChannel(); channel.ExchangeDeclare(_exchange, ExchangeType.Direct, true); channel.QueueDeclare(_queueName, true, autoDelete: false, exclusive: false); var consumer = new AsyncEventingBasicConsumer(channel); consumer.Received += OnMessage; channel.BasicConsume(_queueName, false, consumer); return(channel); }
public RpcClient(string exchangeName, IRabbitMqConnection connection) { _exchangeName = exchangeName; _connection = connection; _requestQueue = typeof(TRequest).Name; _replyQueue = typeof(TReply).Name; _connection.Connect(); _consumerChannel = _connection.CreateChannel(); _consumerChannel.ExchangeDeclare(_exchangeName, ExchangeType.Direct, true); _consumerChannel.QueueDeclare(_requestQueue, true, false, false, null); _consumerChannel.QueueDeclare(_replyQueue, true, false, false, null); _consumer = new AsyncEventingBasicConsumer(_consumerChannel); _consumer.Received += Consumer_Received; _consumerChannel.BasicConsume(_replyQueue, true, _consumer); _consumerChannel.QueueBind(_replyQueue, _exchangeName, _replyQueue); _pendingMessages = new ConcurrentDictionary <Guid, TaskCompletionSource <TReply> >(); }
public Task Start(CancellationToken cancellationToken) { _logger.LogInformation($"Starting RabbitMQ EventBus {Name}"); _connection.Connect(); var queueSection = _configuration.GetSection($"{Name}:Queues"); queueSection.Bind(_queues); foreach (var queue in _queues) { if (!string.IsNullOrEmpty(queue.Exchange) && !string.IsNullOrEmpty(queue.ExchangeType)) { _logger.LogInformation($"Declare Exchange {queue.Exchange} {queue.ExchangeType}"); _connection.Model.ExchangeDeclare(queue.Exchange, queue.ExchangeType); } _logger.LogInformation($"Declare Queue {queue.Name}"); _connection.Model.QueueDeclare(queue.Name, queue.Durable, queue.Exclusive, queue.AutoDelete, queue.Arguments); } foreach (var handler in _subscriber.Handlers) { DoSubscribe(handler.Key); } return(Task.CompletedTask); }