我想创建方法:
bool TryPullMessage(string queue, out T message, TimeSpan? timeout = null);
将尝试从队列中提取一个消息(我一次为1条消息配置了Qos),并在超时后失败。为了实现,我有两个选择:
但是,我不想使用第一种方法,因为它会创建无限的流量和资源消耗。对于第二种方法,我尝试了很多这样的事情:
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推送用于单个消息?