带有 ACK 和 NACK 的 RabbitMQ 顺序发布(拒绝和 Nack 处理)同步
RabbitMQ Sequential Publish with ACK and NACKs(Reject & Nack handling) Synchronous
Console.WriteLine($"Publishing to Default EXG & queue: {result.QueueName}");
待办事项:构建重试、重新发布和确认工作流。
IBasicProperties messageProps = _channel.CreateBasicProperties();
messageProps.Persistent = true;
//Handle Acks
_channel.BasicAcks += _channel_BasicAcks;
_channel.ConfirmSelect();
//Publish
byte[] body = Encoding.UTF8.GetBytes(messageToPublish);
_channel.QueueBind(
queueName,
exchangeName,
routingKey,
null
);
_channel.BasicPublish
( exchange: exchangeName,
routingKey: routingKey,
basicProperties: messageProps,
body: body);
//Wait for the Confirmations
_channel.ConfirmSelect();
_channel.WaitForConfirmsOrDie(10000);
事件
_channel_BasicAcks (Object Sender, EventArgs e)
现在正在从发布方法(异步)的范围外部调用,而不是同步获取响应。
对于 在批量发布中出现 nack 后立即重试单个消息 的精装要求,我如何使它 严格同步。
Sync Wrapper to Async Publish 方法是我想出的解决方案,虽然不是最好的,但它确实有效!有没有更好的解决方案,而不是必须通过超时反复试验!
For a hardbound requirement of retrying individual messages
immediately after a nack in a bulk publish how do I make this strictly
synchronous.
不要同步等待ack!
保存消息client-side直到你收到一个异步ack/nack,然后根据这个响应做一些事情。指定一定数量的 "outstanding" 可接受的确认,如果达到该限制则不发布。指定接收 ack/nack 可接受的时间限制,如果超过该限制,请在您的应用程序中做一些处理。
注意: RabbitMQ 团队监控 rabbitmq-users
mailing list 并且有时只在 Whosebug 上回答问题。
Console.WriteLine($"Publishing to Default EXG & queue: {result.QueueName}");
待办事项:构建重试、重新发布和确认工作流。
IBasicProperties messageProps = _channel.CreateBasicProperties();
messageProps.Persistent = true;
//Handle Acks
_channel.BasicAcks += _channel_BasicAcks;
_channel.ConfirmSelect();
//Publish
byte[] body = Encoding.UTF8.GetBytes(messageToPublish);
_channel.QueueBind(
queueName,
exchangeName,
routingKey,
null
);
_channel.BasicPublish
( exchange: exchangeName,
routingKey: routingKey,
basicProperties: messageProps,
body: body);
//Wait for the Confirmations
_channel.ConfirmSelect();
_channel.WaitForConfirmsOrDie(10000);
事件
_channel_BasicAcks (Object Sender, EventArgs e)
现在正在从发布方法(异步)的范围外部调用,而不是同步获取响应。
对于 在批量发布中出现 nack 后立即重试单个消息 的精装要求,我如何使它 严格同步。
Sync Wrapper to Async Publish 方法是我想出的解决方案,虽然不是最好的,但它确实有效!有没有更好的解决方案,而不是必须通过超时反复试验!
For a hardbound requirement of retrying individual messages immediately after a nack in a bulk publish how do I make this strictly synchronous.
不要同步等待ack!
保存消息client-side直到你收到一个异步ack/nack,然后根据这个响应做一些事情。指定一定数量的 "outstanding" 可接受的确认,如果达到该限制则不发布。指定接收 ack/nack 可接受的时间限制,如果超过该限制,请在您的应用程序中做一些处理。
注意: RabbitMQ 团队监控 rabbitmq-users
mailing list 并且有时只在 Whosebug 上回答问题。