Как принимать и отклонять (Ack и Nack) сообщения вручную? - PullRequest
0 голосов
/ 17 июня 2019

Я создаю базу потребителей для получения каждого сообщения из RabbitMq. Я использую easynetq для получения сообщений, в которых потребитель настроен в расширенном режиме, потому что в очереди есть несколько разных конфигураций. После получения сообщения вызывается асинхронный метод вызова для обработки каждого сообщения. Тем не менее, метод потребления в продвинутом не имеет асинхронного метода потребления. Нужно ли вызывать асинхронный метод с помощью методов Task.Run или Task.Factory.StartNew?

Некоторый процесс может длиться долго, и в процессе могут возникать ошибки. В случаях ошибок мне нужно отклонить сообщение и снова отправить сообщение в очередь. После успешного завершения процесса сообщение может принять и удалить его из очереди.

Это пример моего кода:

var queue = _bus.Advanced.QueueDeclare(_queueName, durable: true);
            _consumerResult = _bus.Advanced.Consume(queue, (body, properties, info) =>
            {
                var message = Encoding.UTF8.GetString(body);

                if (string.IsNullOrWhiteSpace(message))
                    return;

                var deserializeObject = JsonConvert.DeserializeObject<IntegrationEvent<T>>(message, new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Include,
                    TypeNameHandling = TypeNameHandling.Auto,
                    TypeNameAssemblyFormatHandling = TypeNameAssemblyFormatHandling.Simple
                });

                deserializeObject.DeliveryTag = info.DeliverTag;

                // I need to call a async method               
                ConsumeAsync(deserializeObject));

            });

Как я могу принять и отклонить сообщение вручную?

...