Console.WriteLine($"Publishing to Default EXG & queue: {result.QueueName}");
Todo: процесс создания повторных попыток, повторной публикации и подтверждения.
IBasicProperties messageProps = _channel.CreateBasicProperties();
messageProps.Persistent = true;
//Handle Acks
_channel.BasicAcks += _channel_BasicAcks;
_channel.ConfirmSelect();
//Publish
byte[] body = Encoding.UTF8.GetBytes(messageToPublish);
_channel.QueueBind(
queueName,
exchangeName,
routingKey,
null
);
_channel.BasicPublish
( exchange: exchangeName,
routingKey: routingKey,
basicProperties: messageProps,
body: body);
//Wait for the Confirmations
_channel.ConfirmSelect();
_channel.WaitForConfirmsOrDie(10000);
Событие
_channel_BasicAcks (Отправитель объекта, EventArgs e)
, который теперь вызывается извне из области действия метода публикации (асинхронный) вместо синхронного получения ответа.
Для жестких требований повторение отдельных сообщений сразу после публикации большого количества сообщений, как сделать эту строго синхронной .
Синхроупаковщик в Async Publish - это решение, которое я придумал, оно работает, хотя и не самое лучшее! Есть ли более эффективное решение вместо проб и ошибок с тайм-аутами!