Exemple #1
0
        public Task StartAsync(CancellationToken cancellationToken)
        {
            ThrowIfDisposed();

            if (_started)
            {
                throw new InvalidOperationException("The listener has already been started.");
            }

            _channel = _service.GetChannel();
            _channel.BasicQos(0, _batchNumber, false);
            _consumer = new EventingBasicConsumer(_channel);

            _consumer.Received += (model, ea) =>
            {
                if (_batchNumber == 1)
                {
                    _executor.TryExecuteAsync(new TriggeredFunctionData()
                    {
                        TriggerValue = ea
                    }, cancellationToken);
                }
                else if (batchedMessages.Count >= _batchNumber)
                {
                    batchedMessages.Add(ea);
                    _executor.TryExecuteAsync(new TriggeredFunctionData()
                    {
                        TriggerValue = batchedMessages
                    }, cancellationToken);
                }
                else
                {
                    batchedMessages.Add(ea);
                }
            };

            _consumerTag = _channel.BasicConsume(queue: _queueName, autoAck: true, consumer: _consumer);

            _started = true;

            return(Task.CompletedTask);
        }