4,EasyNetQ-Request Response

來源:互聯網
上載者:User

標籤:return   adl   響應   exe   同步   factor   link   訊息傳遞   用戶端   

EasyNetQ還支援要求/響應訊息傳遞模式。 這使得用戶端/伺服器應用程式變得容易,客戶機/伺服器應用程式在用戶端向伺服器發出請求,然後處理請求並返迴響應。 與傳統的RPC機制不同,EasyNetQ請求/響應操作不具有名稱,而是簡單地由請求/響應訊息類型對定義。

此外,與傳統的RPC機制(包括大多數Web服務工具包)不同,EasyNetQ的請求/響應模式基於訊息傳遞,因此它是非同步開箱即用的。

 

提出請求,並處理響應

要使用EasyNetQ發出請求,請在IBus上調用Request方法:

var myRequest = new MyRequest { Text = “Hello Server” };var response = bus.Request<MyRequest, MyResponse>(myRequest);Console.WriteLine(response.Text);

這裡我們建立一個MyMessage類型的新請求,然後調用Request方法,該訊息作為參數。 當響應返回時,響應訊息的Text屬性被輸出到控制台。

 

非同步請求

訊息傳遞本質上是非同步。 您發送訊息,然後允許您的程式繼續其他任務。 在將來的某一時刻,您會收到回應。 使用上面顯示的同步要求方法,您的線程將阻塞,直到返迴響應。 使用RequestAsync方法返回任務通常是一個更好的選擇:

var task = bus.RequestAsync<TestRequestMessage, TestResponseMessage>(request)task.ContinueWith(response => {    Console.WriteLine("Got response: ‘{0}‘", response.Result.Text);});

 

響應請求

要編寫響應請求的伺服器,只需使用如下所示的IBus.Respond方法:

bus.Respond<MyRequest, MyResponse>(request => new MyResponse { Text = “Responding to “ + request.Text});

響應採用一個參數,一個需要請求並返迴響應的Func <TRequest,TResponse>。 適用於訂閱回調的相同建議也適用於響應者。 不要阻止長時間啟動並執行IO操作。 如果要執行長時間啟動並執行IO,請改用RespondAsync。

 

非同步響應

EasyNetQ還提供了一個RespondAsync方法,它使用Func <TRequest,Task <TResponse >>委託。 這允許您執行長時間啟動並執行IO綁定操作,而不會阻止EasyNetQ訂閱處理迴圈。

static void Main(string[] args)    {        //建立一組工作對象        var workers = new BlockingCollection<MyWorker>();        for (int i = 0; i < 10; i++)        {            workers.Add(new MyWorker());        }        // 建立bus        var bus = RabbitHutch.CreateBus("host=localhost");        // 回應請求        bus.RespondAsync<RequestServerTime, ResponseServerTime>(request =>            Task.Factory.StartNew(() =>            {                var worker = workers.Take();                try                {                    return worker.Execute(request);                }                finally                {                    workers.Add(worker);                }            }));        Console.ReadLine();        bus.Dispose();    }

 

應用程式範例

EasyNetQ樣本顯示請求響應和Autosubcriber,使用Windsor IOC進行串連

https://bitbucket.org/philipogorman/createrequestservice/src

 

4,EasyNetQ-Request Response

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.