Example #1
0
        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)));
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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> >();
        }
Example #4
0
        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);
        }