簡體   English   中英

RabbitMQ異常案例數據

[英]RabbitMQ exception case data

我是RabbitMQ的新手,正在做首次申請。 但是我對異常情況有些困惑。 例如,我從隊列中收到一條消息。 並且在將數據保存到數據庫時發生錯誤。 數據將會丟失。 這個問題的解決辦法是什么?

        var factory = new ConnectionFactory { HostName = "10.1.2.34" };

        using (var connection = factory.CreateConnection())
        {
            using (var channel = connection.CreateModel())
            {
                channel.QueueDeclare(queue: "business.orders", durable: false, exclusive: false, autoDelete: false, arguments: null);

                var data = channel.BasicGet(queue: "business.orders", noAck: true);

                using (var stream = new MemoryStream(data.Body))
                {
                    var order = (PlaceOrder)new BinaryFormatter().Deserialize(stream);

                    // Throw exception. ????
                }
            }
        }

您必須使用手動ack

var data = channel.BasicGet(queue: "business.orders", noAck: false);

如果沒有錯誤,請插入數據庫:

channel.BasicAck(result.DeliveryTag, false);

請在這里閱讀: https : //www.rabbitmq.com/dotnet-api-guide.html

bool noAck = false;
BasicGetResult result = channel.BasicGet(queueName, noAck);
if (result == null) {
    // No message available at this time.
} else {
    IBasicProperties props = result.BasicProperties;
    byte[] body = result.Body;
    ...
Since noAck = false above, you must also call IModel.BasicAck to acknowledge that you have successfully received and processed the message:
    ...
    // acknowledge receipt of the message
    channel.BasicAck(result.DeliveryTag, false);
}

順便說一句,我建議也閱讀: https : //www.rabbitmq.com/dotnet-api-guide.html部分:

通過訂閱檢索消息(“推送API”)

basicGetEventingBasicConsumer速度較慢

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM