[英]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”)
basicGet
對EventingBasicConsumer
速度較慢
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.