protected async Task <bool> AskMessage(string queueName, IConnection connection)
        {
            using (var channel = connection.CreateModel())
            {
                var res = channel.BasicGet(queueName, false);
                if (res != null)
                {
                    var       message = _msgProvider.ExtractObject(Encoding.UTF8.GetString(res.Body.ToArray()));
                    Exception exp     = null;
                    try
                    {
                        await Subscribe(message);
                    }
                    catch (Exception ex)
                    {
                        exp = ex;
                    }
                    finally
                    {
                        channel.BasicAck(res.DeliveryTag, false);
                    }

                    if (exp != null)
                    {
                        throw new QueueWatcherException($"bgTeam: {exp.Message}", message, exp);
                    }

                    return(true);
                }
            }

            return(false);
        }
Exemplo n.º 2
0
        protected async Task DispatchRoutine(string queueName)
        {
            var message = _queueProvider.AskMessage(queueName);

            if (message != null)
            {
                var entity = _messageProvider.ExtractObject(message.Body);

                await OnSubscribe(entity);

                _queueProvider.DeleteMessage(message);
            }
            else
            {
                _logger.Info("No messages");
                await Task.Delay(_threadSleep);
            }
        }