C#RabbitMQ EventBasicConsumer用于一条消息?

时间:2017-05-22 09:07:34

标签: c# rabbitmq

我想创建方法:

bool TryPullMessage(string queue, out T message, TimeSpan? timeout = null);

将尝试从队列中提取一个消息(我一次为1条消息配置了Qos),并在超时后失败。为了实现,我有两个选择:

  1. 在循环中使用手动请求:model.BasicGet(queue,...)
  2. 使用消费者:新的EvenBasicConsumer(模型)
  3. 但是,我不想使用第一种方法,因为它会创建无限的流量和资源消耗。对于第二种方法,我尝试了很多这样的事情:

                var parent = new EventWaitHandle(false, EventResetMode.AutoReset);
                var child = new EventWaitHandle(false, EventResetMode.AutoReset);
    
                var consumer = new EventingBasicConsumer(_model);
                consumer.Received += (sender, args) =>
                {
                    //save message localy
                        parent.Set();
                        child.WaitOne();
                };
                _model.BasicConsume(queue, true, consumer);
                try
                {
                    parent.WaitOne(timeout.Value);
                }
                finally
                {
                    _model.BasicCancel(consumer.ConsumerTag);
                    child.Set();
                }
    

    但是没有成功,它只会继续消耗它们。是否可以将RabbitMQ推送用于单个消息?

0 个答案:

没有答案