RabbitMQ顺序发布,带有ACK和NACK(ACK和NACK处理)同步

u59ebvdq  于 8个月前  发布在  RabbitMQ
关注(0)|答案(1)|浏览(106)
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_String,EventArgs_e)**
它现在是从发布方法(publish method,简写为PUBLIC)的作用域外部调用的,而不是同步获取响应。
对于批量发布中的nack后立即重试单个消息的硬绑定要求,我如何使此严格同步
同步 Package 到异步发布方法是我想出的解决方案,它的工作原理,虽然它不是最好的!有没有一个更好的解决方案,而不是必须尝试和错误的超时!

x33g5p2x

x33g5p2x1#

对于在批量发布中的nack之后立即重试单个消息的硬约束要求,我如何使其严格同步。
不要同步等待acks!
在客户端保存消息,直到收到异步的ack / nack消息,然后根据该响应执行一些操作。指定可接受的“未完成”确认的特定数量,如果达到该限制则不发布。指定一个可以接受的接收ack/nack的时间限制,如果超过了这个限制,请在应用程序中做一些处理。

相关问题