Моя текущая настройка потребляет два сообщения в очереди, и я понятия не имею, почему.
Код: Выделить всё
public async Task Receive(string custId, string db, ILogger logger)
{
var factory = CreateConnectionFactory();
var connection = await factory.CreateConnectionAsync();
var channel = await connection.CreateChannelAsync();
await channel.BasicQosAsync(prefetchSize: 0, prefetchCount: 1, global: false);
var queue = await QueueDeclareAsync(channel, db);
if (queue.MessageCount is 0) return new Message();
var consumer = new AsyncEventingBasicConsumer(channel);
var messageReceived = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously);
var consumerTag = await channel.BasicConsumeAsync(db, autoAck: false, consumer: consumer);
consumer.ReceivedAsync += async (model, ea) =>
{
var body = ea.Body.ToArray();
var receivedMessage = Encoding.UTF8.GetString(body);
await channel.BasicAckAsync(ea.DeliveryTag, multiple: false);
messageReceived.TrySetResult(receivedMessage);
await channel.BasicCancelAsync(consumerTag);
};
var message = await messageReceived.Task;
return await ProcessReceivedMessage(custId, message);
}
< /code>
Я попытался использовать: < /p>
await channel.BasicQosAsync(prefetchSize: 0, prefetchCount: 1, global: false);
Подробнее здесь: https://stackoverflow.com/questions/794 ... mq-message