protected override async Task OnListenerTaskStartAsync(CancellationToken token)
        {
            _token    = token;
            _receiver = new RabbitMQueue(Connection);
            _receiver.EnsureConnection();
            _receiver.EnsureQueue();
            _receiverConsumer           = new EventingBasicConsumer(_receiver.Channel);
            _receiverConsumer.Received += (ch, ea) =>
            {
                var message = new RabbitMessage
                {
                    CorrelationId = Guid.Parse(ea.BasicProperties.CorrelationId),
                    Properties    = ea.BasicProperties,
                    Body          = ea.Body
                };
                Task.Run(() => EnqueueMessageToProcessAsync(ProcessingTaskAsync, message));
                _receiver.Channel.BasicAck(ea.DeliveryTag, false);
            };
            _receiverConsumerTag = _receiver.Channel.BasicConsume(_receiver.Name, false, _receiverConsumer);
            _monitorTask         = Task.Run(MonitorProcess, _token);

            await token.WhenCanceledAsync().ConfigureAwait(false);

            if (_receiverConsumerTag != null)
            {
                _receiver.Channel.BasicCancel(_receiverConsumerTag);
            }
            _receiver.Close();

            await _monitorTask.ConfigureAwait(false);
        }
Ejemplo n.º 2
0
        private async ValueTask CreateReceiverConsumerAsync()
        {
            if (_receiverConsumer != null)
            {
                return;
            }
            if (_receiver is null)
            {
                return;
            }
            using (await _locker.LockAsync().ConfigureAwait(false))
            {
                if (_receiverConsumer != null)
                {
                    return;
                }
                if (_receiver is null)
                {
                    return;
                }
                await _receiver.EnsureConnectionAsync(5000, int.MaxValue).ConfigureAwait(false);

                _receiver.EnsureQueue();
                _receiverConsumer           = new EventingBasicConsumer(_receiver.Channel);
                _receiverConsumer.Received += MessageReceivedHandler;
                var rcvName = _receiver.Name;
                if (!UseSingleResponseQueue)
                {
                    rcvName += "-" + Core.InstanceIdString;
                    _receiver.Channel.QueueDeclare(rcvName, false, false, true, null);
                }
                _receiverConsumerTag = _receiver.Channel.BasicConsume(rcvName, false, _receiverConsumer);
                Core.Log.LibVerbose("The Receiver for the queue \"{0}\" has been created.", rcvName);
            }
        }
Ejemplo n.º 3
0
        /// <inheritdoc />
        /// <summary>
        /// Create a new message queue
        /// </summary>
        /// <param name="queue">Message Queue connection instance</param>
        /// <returns>true if the message queue was created; otherwise, false.</returns>
        public bool Create(MQConnection queue)
        {
            if (Exist(queue))
            {
                return(false);
            }
            var rabbitQueue = new RabbitMQueue(queue);

            if (!rabbitQueue.EnsureConnection())
            {
                return(false);
            }
            rabbitQueue.EnsureQueue();
            rabbitQueue.EnsureExchange();
            rabbitQueue.Close();
            return(true);
        }
Ejemplo n.º 4
0
        /// <inheritdoc />
        /// <summary>
        /// Create a new message queue
        /// </summary>
        /// <param name="queue">Message Queue connection instance</param>
        /// <returns>true if the message queue was created; otherwise, false.</returns>
        public bool Create(MQConnection queue)
        {
            if (Exist(queue))
            {
                return(false);
            }
            var rabbitQueue = new RabbitMQueue(queue);

            if (!rabbitQueue.EnsureConnectionAsync(2000, 100).WaitAndResults())
            {
                return(false);
            }
            rabbitQueue.EnsureQueue();
            rabbitQueue.EnsureExchange();
            rabbitQueue.Close();
            return(true);
        }
Ejemplo n.º 5
0
        private void CreateReceiverConsumer()
        {
            if (_receiverConsumer != null)
            {
                return;
            }
            if (_receiver == null)
            {
                return;
            }
            lock (_receiver)
            {
                if (_receiverConsumer != null)
                {
                    return;
                }
                if (_receiver == null)
                {
                    return;
                }
                _receiver.EnsureConnection();
                _receiver.EnsureQueue();
                _receiverConsumer           = new EventingBasicConsumer(_receiver.Channel);
                _receiverConsumer.Received += (ch, ea) =>
                {
                    var correlationId = Guid.Parse(ea.BasicProperties.CorrelationId);

                    if (!ReceivedMessages.TryRemove(correlationId, out var message))
                    {
                        _receiver.Channel.BasicNack(ea.DeliveryTag, false, true);
                        return;
                    }

                    message.CorrelationId = correlationId;
                    message.Body          = ea.Body;
                    message.Properties    = ea.BasicProperties;
                    message.WaitHandler.Set();
                    _receiver.Channel.BasicAck(ea.DeliveryTag, false);
                };
                _receiverConsumerTag =
                    _receiver.Channel.BasicConsume(_receiver.Name, false, _receiverConsumer);
                Core.Log.LibVerbose("The Receiver for the queue \"{0}\" has been created.", _receiver.Name);
            }
        }
Ejemplo n.º 6
0
        protected override async Task OnListenerTaskStartAsync(CancellationToken token)
        {
            _token    = token;
            _receiver = new RabbitMQueue(Connection);
            await _receiver.EnsureConnectionAsync(5000, int.MaxValue).ConfigureAwait(false);

            _receiver.EnsureQueue();
            _receiverConsumer           = new EventingBasicConsumer(_receiver.Channel);
            _receiverConsumer.Received += MessageReceivedHandler;
            _receiverConsumerTag        = _receiver.Channel.BasicConsume(_receiver.Name, false, _receiverConsumer);
            _monitorTask = Task.Run(MonitorProcess, _token);

            await token.WhenCanceledAsync().ConfigureAwait(false);

            if (_receiverConsumerTag != null)
            {
                _receiver.Channel.BasicCancel(_receiverConsumerTag);
            }
            _receiver.Close();

            await _monitorTask.ConfigureAwait(false);
        }