Beispiel #1
0
        public void StartConsuming()
        {
            if (ConsumingChannel is null)
            {
                throw new ConsumingChannelIsNullException($"Consuming channel is null. Configure {nameof(IConsumingService)} or full functional {nameof(IQueueService)} for consuming messages.");
            }

            if (_consumingStarted)
            {
                return;
            }

            _consumer.Received += async(sender, eventArgs) => await _messageHandlingService.HandleMessageReceivingEvent(eventArgs, this);

            _consumingStarted = true;

            var consumptionExchanges = _exchanges.Where(x => x.IsConsuming);

            foreach (var exchange in consumptionExchanges)
            {
                foreach (var queue in exchange.Options.Queues)
                {
                    ConsumingChannel.BasicConsume(queue: queue.Name, autoAck: false, consumer: _consumer);
                }
            }
        }
Beispiel #2
0
        private async Task ExecutePipeline(MessageHandlingContext context)
        {
            if (!_messageHandlingMiddlewares.Any())
            {
                await _messageHandlingService.HandleMessageReceivingEvent(context);

                return;
            }

            Func <Task> handleFunction = async() => await _messageHandlingService.HandleMessageReceivingEvent(context);

            foreach (var middleware in _messageHandlingMiddlewares)
            {
                var previousHandleFunction = handleFunction;
                handleFunction = async() => await middleware.Handle(context, previousHandleFunction);
            }

            await handleFunction().ConfigureAwait(false);
        }
 Task ConsumerOnReceived(object sender, BasicDeliverEventArgs eventArgs) => _messageHandlingService.HandleMessageReceivingEvent(eventArgs, this);