Rabbitmq 使用 .NET 使用单个同步调用检索多条消息

Rabbitmq retrieve multiple messages using single synchronous call using .NET

有没有办法通过 .NET 使用单个同步调用来接收多条消息?
我见过 question and I've found java class com.rabbitmq.client.QueueingConsumer,但我还没有在 .NET 命名空间(RabbitMQ.Client、RabbitMQ.Client.Events)

中找到这样的客户端 class

您可以使用 BasicQoS.PrefetchCount:

检索任意数量的消息
var model = _rabbitConnection.CreateModel();
// Configure the Quality of service for the model. Below is how what each setting means.
// BasicQos(0="Dont send me a new message untill I’ve finshed",  _fetchSize = "Send me N messages at a time", false ="Apply to this Model only")
model.BasicQos(0, fetchSize, false);

注意:如果您设置 fetchSize = 20,那么它将检索当前队列中的前 20 条消息。但是,一旦队列被清空,它就不会等待 20 条消息在队列中建立起来,它会尽快开始使用它们,抓取 一次20个。

希望这是有道理的。

感谢您的回答,但我找到了我要找的 class:RabbitMQ.Client.QueueingBasicConsumer
简单的实现是:

IEnumerable<T> Get(int maxBatchCount, int getMessageTimeout, int getBatchTimeout)
{
    var result = new List<T>();
    var startTime = DateTime.Now;
    while (result.Count < maxBatchCount)
    {
        var deliverEventArgs = new BasicDeliverEventArgs();
        if ((_consumer as QueueingBasicConsumer).Queue.Dequeue(GetMessageTimeout, out deliverEventArgs))
        {
            var entry = ContractSerializer.Deserialize<T>(deliverEventArgs.Body);
            result.Add(entry);
            _queue.Channel.BasicAck(deliverEventArgs.DeliveryTag, false);
        }
        else
            break;

        if ((DateTime.Now - startTime) >= TimeSpan.FromMilliseconds(getBatchTimeout))
            break;
    }
    return result;
}

嗯,当然,你可以用Environment.TickCount代替DateTime.Now