日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

转载 1-EasyNetQ介绍(黄亮翻译) https://www.cnblogs.com/HuangLiang/p/7105659.html

發(fā)布時(shí)間:2025/4/16 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转载 1-EasyNetQ介绍(黄亮翻译) https://www.cnblogs.com/HuangLiang/p/7105659.html 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

EasyNetQ 是一個(gè)容易使用,堅(jiān)固的,針對(duì)RabbitMQ的 .NET API。

假如你盡可能快的想去安裝和運(yùn)行RabbitMQ,請(qǐng)去看入門(mén)指南。
EasyNetQ是為了提供一個(gè)盡可能簡(jiǎn)潔的適用與RabbitMQ的.NET類庫(kù)。為了實(shí)現(xiàn)這些目標(biāo),EasyNetQ提供一種自認(rèn)為你會(huì)在.NET下使用RabbitMQ的視圖。為了保持使用靈活性,簡(jiǎn)單起見(jiàn),EasyNetQ強(qiáng)制使用了一些簡(jiǎn)單的約定。包括如下:

  • 消息用 .NET 類型表示
  • 消息通過(guò).NET類型路由

這意味著消息必須用 .NET class定義。每一個(gè)你想發(fā)送的不同的消息類型必須用一個(gè)class表示。這個(gè)類必須是public并帶有一個(gè)默認(rèn)構(gòu)造函數(shù)和可以讀寫(xiě)的屬性。在這個(gè)消息中,你通常不需要實(shí)現(xiàn)任何功能。僅僅把這個(gè)消息單做一個(gè)簡(jiǎn)單的數(shù)據(jù)容器或者DTO。下面是一個(gè)簡(jiǎn)單的消息。

public class MyMessage {public string Text { get; set; } }

EasyNetQ通過(guò)消息的類型來(lái)路由。當(dāng)你發(fā)布一個(gè)消息,EasyNetQ會(huì)檢查消息類型, 然后給它一個(gè)基于類型名稱、命名空間和程序集的路由鍵。在消費(fèi)者端,消費(fèi)者去訂閱這個(gè)類型。在訂閱這個(gè)類型之后,消費(fèi)者就會(huì)得到這個(gè)類型的消息。

默認(rèn)情況下,EasyNetQ使用Newtonsoft.Json 序列化.NET類型為JSON.這樣有一個(gè)好處就是消息對(duì)與人類可讀性好。因此你能夠使用類似于RabiitMQ 管理端應(yīng)用去調(diào)試消息問(wèn)題。

API 設(shè)計(jì)

EasyNetQ是一個(gè)在RabbitMQ.Client類庫(kù)之上提供服務(wù)的組件集合。做了這些事情,像序列化、錯(cuò)誤處理、線程管理、連接管理等。通過(guò)一個(gè)Mini-Ioc容器組織在一起。你能很容易用你自己實(shí)現(xiàn)去替換這些組件。所以如果你喜歡用XML 序列化而不是用JSON,僅僅需要以一個(gè)ISerializer的實(shí)現(xiàn),然后注冊(cè)到這個(gè)容器中。

這些組件最上層是IAdvancedBus API。這看起來(lái)很像AMQP規(guī)格。實(shí)際也是你能夠通過(guò)這個(gè)API運(yùn)行很多AMQP方法。這個(gè)API對(duì)你隱藏了唯一AMQP概念是channels。這是因?yàn)閏hannels 是一個(gè)復(fù)雜的底層概念,不應(yīng)該被放到AMQP部分規(guī)格的第一的位置。 坦白來(lái)說(shuō),這個(gè)API中 ‘Advanced’不是一個(gè)非常好的名字。用‘lamqp’可能更好些。

這個(gè)頂層高級(jí)API是一系列消息模式:Publish/Subscribe, Request/Response,和 Send/Receive. 這是EasyNetQ堅(jiān)持的設(shè)計(jì)思想。這些模式是我們應(yīng)該實(shí)現(xiàn)的。這樣有非常小的彈性。要么你接受我的處理方法,或者你就不要去使用。這樣做的目的是,不用你和使用者花費(fèi)精力去重新發(fā)明輪子。你不需要每一次去做選擇,你只需要簡(jiǎn)單的去Publish和Subscribe消息。這樣設(shè)計(jì)是未來(lái)實(shí)現(xiàn)EasyNetQ的核心目標(biāo),即盡可能簡(jiǎn)單的使用RabbitMQ。

這些模式的后面是這個(gè) IBus API. 再一次看到這個(gè)一個(gè)簡(jiǎn)單的名字,它跟消息總線概念有關(guān)。IPackagedMessagePatterns可能是一個(gè)更好名字。

80%的用戶的工作,在80%的時(shí)間都會(huì)使用IBus。它不是完備的API,如果這個(gè)模式下,你想實(shí)現(xiàn)的功能這個(gè)IBus沒(méi)有提供,那么你應(yīng)該使用IAdvancedBus。這樣使用沒(méi)有問(wèn)題,EasyNetQ就這這樣設(shè)計(jì)使用的。

為什么我需要EasyNetQ?

RabbitMQ不是已經(jīng)有了 .NET client?
確實(shí)如此。你可以在這里下載 .NET AMQP 客戶端類庫(kù)。

那么為什么我需要EasyNetQ呢?RabbitMQ .NET client 實(shí)現(xiàn)了AMQP協(xié)議的客戶端(RabbitMQ實(shí)現(xiàn)了服務(wù)器端)。 AMQP是為HTTP協(xié)議設(shè)計(jì)的。它的設(shè)計(jì)是跨平臺(tái)的和與語(yǔ)言無(wú)關(guān)的。它也旨在靈活支持多種基于交換/綁定/隊(duì)列模型的消息傳遞模式。

RabiitMQ Client 非常地靈活,但是伴隨著靈活性而來(lái)是復(fù)雜性。這意味著你為了需要寫(xiě)大量代碼,以便執(zhí)行RabbitMQ client。通常,這些代碼包括一下這些:

  • 實(shí)現(xiàn)消息傳遞模式,例如Publish/Subscribe或Request/Response。盡管,公平來(lái)講,這個(gè) .NET client 也提供了一些這樣的支持。

  • 實(shí)現(xiàn)路由策略。你將需要設(shè)計(jì)你如何去 exchange-queue 綁定。并且你將設(shè)計(jì)怎樣在生產(chǎn)者和消費(fèi)者之間進(jìn)行消息路由。

  • 實(shí)現(xiàn)消息的序列化/反序列化。 你將如何轉(zhuǎn)換AMQP的二進(jìn)制消息為你編程語(yǔ)言能理解的格式?

  • 為訂閱去實(shí)現(xiàn)一個(gè)消費(fèi)者線程。你將需要有一個(gè)專門(mén)的消費(fèi)者循環(huán)等待你訂閱的消息。你會(huì)如何處理多個(gè)訂閱者,或者瞬間訂閱者,像哪些等待答復(fù)的請(qǐng)求。

  • 實(shí)現(xiàn)消費(fèi)者重新連接。假如連接崩潰了或者RabbitMQ 服務(wù)掛了,你怎樣能檢測(cè)到并確保你所有的訂閱都能被重建?

  • 懂得和實(shí)施服務(wù)質(zhì)量設(shè)置。你需要什么樣的設(shè)置來(lái)確保一個(gè)可靠的客戶端。

  • 實(shí)現(xiàn)一個(gè)錯(cuò)誤處理策略。假如接受到一個(gè)錯(cuò)誤的消息,或者發(fā)生一個(gè)未處理異常被拋出,你的客戶端應(yīng)該做什么呢?

  • 實(shí)現(xiàn)發(fā)布者可靠的消息確認(rèn)。

EasyNetQ目標(biāo)是在AMQP之上封裝所有這些關(guān)注點(diǎn)在一個(gè)簡(jiǎn)單好用的類庫(kù)中。EasyNetQ有在高容量商業(yè)環(huán)境中數(shù)年使用RabbitMQ的經(jīng)驗(yàn)。

性能評(píng)估

EasyNetQ的性能直接跟RabbitMQ broker的性能相關(guān)。這可能隨著網(wǎng)絡(luò)和服務(wù)器性能不同而不同。在一個(gè)開(kāi)發(fā)者機(jī)器上用本地RabbitMQ實(shí)例上測(cè)試,持續(xù)通宵執(zhí)行實(shí)現(xiàn)了每秒50002K消息送到。每個(gè)EasyNetQ 終結(jié)點(diǎn)在一夜中穩(wěn)定運(yùn)行。

原文地址:https://github.com/EasyNetQ/EasyNetQ/wiki/Introduction

轉(zhuǎn)載于:https://www.cnblogs.com/Jeely/p/10784555.html

總結(jié)

以上是生活随笔為你收集整理的转载 1-EasyNetQ介绍(黄亮翻译) https://www.cnblogs.com/HuangLiang/p/7105659.html的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。