Я создаю базу потребителей для получения каждого сообщения из 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));
});
Как я могу принять и отклонить сообщение вручную?