默認的AMQP發佈不是事務性的,而且不能保證您的消息實際上會到達代理。 AMQP指定了一個事務性發布,可是對於RabbitMQ來講,它很是慢,咱們尚未經過EasyNetQ API支持。 對於高性能保證交付,建議您使用「發佈確認」。 簡而言之,這是AMQP的擴展,當代理成功收到您的消息時,它會提供回調。性能
'成功收到'是什麼意思? 這取決於 ...spa
經過在鏈接字符串上設置publisherConfirms = true來啓用發佈確認:代理
bus = RabbitHutch.CreateBus("host=localhost;publisherConfirms=true;timeout=10");
同步bus.Publish(..)方法將在返回以前等待確認。 在超時期限以前未確認(也在鏈接字符串中配置)將致使引起異常。 發佈確認同步發佈方法會顯着減慢。 若是性能問題,您應該考慮使用PublishAsync方法:code
bus.PublishAsync(new MyMessage { Text = "Hello World" }).ContinueWith(task => { // 這隻會檢查完成的任務IsCompleted是否成立,即便對於咱們使用if(task.IsCompleted &&!task.IsFaulted)來檢查成功的故障狀態任務 if (task.IsCompleted) { //Console.Out.WriteLine("{0} Completed", count); } if (task.IsFaulted) { Console.Out.WriteLine("\n\n"); Console.Out.WriteLine(task.Exception); Console.Out.WriteLine("\n\n"); } });
這將在收到確認以前返回。 若是未收到確認或NACK確認,任務將在故障狀態下完成。blog