10,EasyNetQ-發佈確認

默認的AMQP發佈不是事務性的,而且不能保證您的消息實際上會到達代理。 AMQP指定了一個事務性發布,可是對於RabbitMQ來講,它很是慢,咱們尚未經過EasyNetQ API支持。 對於高性能保證交付,建議您使用「發佈確認」。 簡而言之,這是AMQP的擴展,當代理成功收到您的消息時,它會提供回調性能

'成功收到'是什麼意思? 這取決於 ...spa

  • transient(瞬時)消息在隊列入場時被確認。
  • 持久性消息一旦被保存到磁盤或者在每一個隊列上被使用,就會被確認。
  • 直接發佈不可修改的瞬態消息。

經過在鏈接字符串上設置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

相關文章
相關標籤/搜索