我有一个生产者,每当通过API调用接收到消息时,它都会排队,并且我只想在确认消息已被代理接收时返回。
我通过出版商的确认找到了方法-
using (var connection = factory.CreateConnection())
{
using(var channel = connection.CreateModel())
{
channel.ExchangeDeclare(exchangeName, "topic", true, false, null);
//This enables producer confirm
channel.ConfirmSelect();
var properties = channel.CreateBasicProperties();
properties.Persistent = true;
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish(exchangeName, topic, properties, body);
channel.WaitForConfirms();
Console.WriteLine("I sent a message !", message);
}
}
我的问题是,我不想等待所有确认,只是那些与此特定的消息。我不想把它限制在一个线程/工作线程上,也不想等待所有的事情都得到确认。
js的rabbit库有一个回调函数,非常适合我的使用--但是C#版本似乎不支持它。
2条答案
按热度按时间qnakjoqk1#
我的问题是,我不想等待所有确认,只是那些与此特定的消息。
您应该订阅
BasicAcks
回调,并使用它将确认与已发布的消息关联起来。我不想将此限制为单个线程/工作线程
您可以在线程之间共享该连接,但必须为每个线程创建一个
IModel
示例。55ooxyrt2#
您需要的是Publisher Confirms和事务。
将您想要确认的消息分离为单个(或子集)交易。
交易:
您可以使用流式轻量级发布者确认,使用:
我希望它能帮助