EasyNetQ-用于使用 RabbitMQ 的 .NET API開源的工具庫

Part1介紹

EasyNetQ 的目標是提供一個庫,用于在 .NET 中使用 RabbitMQ 盡可能簡單。為了做到這一點,它通過強制執行一些簡單的約定來以靈活性換取簡單性。這些包括:

消息應該由 .NET 類型表示。消息應按其 .NET 類型進行路由。這意味著消息是由 .NET 類定義的。您要發送的每種不同的消息類型都由一個類表示。該類必須是公共的,必須具有默認構造函數和公共讀/寫屬性。您通常不會在消息中實現任何功能,而是將其視為簡單的數據容器或數據傳輸對象 (DTO)。

默認情況下,EasyNetQ 使用 Newtonsoft.Json 庫將 .NET 類型序列化為 JSON。

Part2API設計

92958bc39319c3aef803e7274df1f565.png

EasyNetQ 是在 RabbitMQ.Client 庫之上提供服務的組件集合。它們執行序列化、錯誤處理、線程編組、連接管理等操作。它們由 mini-IoC 容器組成。您可以很容易地用您自己的實現替換任何組件。因此,如果您想要 XML 序列化而不是內置 JSON,只需編寫 ISerializer 的實現并將其注冊到容器中。

這些組件以 IAdvancedBus API 為前端。這看起來很像 AMQP 規范,實際上您可以從這個 API 運行大多數 AMQP 方法。此 API 對您隱藏的唯一 AMQP 概念是通道。這是因為通道是一個令人困惑的低級概念,一開始就不應該成為 AMQP 規范的一部分。老實說,“高級”對于這個 API 來說并不是一個很好的名字,“Iamqp”會好得多。

位于高級 API 之上的是一組消息傳遞模式:發布/訂閱、請求/響應和發送/接收。這是 EasyNetQ 的“主見”部分。這是我們對如何實施這些模式的看法。靈活性很小;要么你接受我們的做事方式,要么你不使用它。目的是您,用戶,不必花費腦力去重新發明相同的模式;您不必在每次只想發布和訂閱消息時都做出選擇。它旨在實現 EasyNetQ 的核心目標,即盡可能輕松地使用 RabbitMQ。

這些模式位于 IBus API 后面。再一次,這是一個糟糕的名字,它與消息總線的概念幾乎沒有關系。更好的名稱是 IPackagedMessagePatterns。

IBus 旨在為 80% 的用戶、80% 的時間工作。這并不詳盡。如果您要實現的模式不是由 IBus 提供的,那么您應該使用 IAdvancedBus。這樣做沒有問題,EasyNetQ 就是這樣設計的。

Part3為什么我需要 EasyNetQ?

RabbitMQ 不是已經有 .NET 客戶端了嗎?

那么為什么我需要 EasyNetQ?RabbitMQ .NET 客戶端實現了 AMQP 協議的客戶端(而 RabbitMQ 實現了服務器端)。AMQP 旨在作為消息傳遞的 HTTP。它被設計成跨平臺和語言無關的。它還旨在靈活地支持基于 Exchange/Binding/Queue 模型的各種消息傳遞模式。

擁有這種靈活性很棒,但隨著靈活性而來的是復雜性。這意味著您需要編寫大量代碼才能實現 RabbitMQ 客戶端。通常,此代碼將包括:

實現消息傳遞模式,例如發布/訂閱或請求/響應。雖然,公平地說,.NET 客戶端確實在這里提供了一些支持。實施路由策略。您將如何設計交換隊列綁定,以及如何在生產者和消費者之間路由消息?實現消息序列化/反序列化。您將如何將 AMQP 中消息的二進制表示轉換為您的編程語言可以理解的內容?為訂閱實現消費者線程。您需要有一個專門的消費者循環來等待您訂閱的消息。您將如何處理多個訂閱者或臨時訂閱者,例如等待請求響應的訂閱者?實施訂戶重新連接。如果連接中斷或 RabbitMQ 服務器彈跳,您如何檢測它并確保重建所有訂閱?了解并實施服務質量設置。您需要進行哪些設置以確保您擁有可靠的客戶端。實施錯誤處理策略。如果您的客戶端收到格式錯誤的消息,或者拋出意外異常,您應該怎么做?實施發布者確認可靠消息傳遞。EasyNetQ 旨在將所有這些問題封裝在一個簡單易用的庫中,該庫位于現有 AMQP 客戶端之上。它是 RabbitMQ 在大容量商業環境中幾年使用經驗的結晶。

Part4簡單使用

接到 RabbitMQ 代理

var?bus?=?RabbitHutch.CreateBus("host=localhost");

發布消息

await?bus.PubSub.PublishAsync(message);

發布一條延遲5秒的消息

await?bus.Scheduler.FuturePublishAsync(message,?TimeSpan.FromSeconds(5));

訂閱消息

await?bus.PubSub.SubscribeAsync<MyMessage>("my_subscription_id",?msg?=>?Console.WriteLine(msg.Text));

RPC 服務器

await?bus.Rpc.RespondAsync<TestRequestMessage,?TestResponseMessage>(request?=>new?TestResponseMessage{?Text?=?request.Text?+?"?all?done!"?});

Part5地址

https://github.com/EasyNetQ/EasyNetQ

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284361.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284361.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284361.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python 中 __name__ 的使用

1. 如果模塊是被導入&#xff0c;__name__的值為模塊名字2. 如果模塊是被直接執行&#xff0c;__name__的值為’__main__’Py1.py #&#xff01;/usr/bin/env python def test():print __name__ ,__name__ if __name__ __main__:test() Py2.py #&#xff01;/usr/bin/env pyt…

第6章 循環

6.1 range 函數用來創建一個數字列表&#xff0c;它的范圍是從起始數字開始到結束數字之前 1 >>> for x in range(0,5): 2 print(Hello %s % x) 3 4 Hello 0 5 Hello 1 6 Hello 2 7 Hello 3 8 Hello 4 1 >>> print(list(range(10,20))) 2 [10, 11, 12, …

C# 實例解釋面向對象編程中的依賴反轉原則

在面向對象編程中&#xff0c;SOLID 是五個設計原則的首字母縮寫&#xff0c;旨在使軟件設計更易于理解、靈活和可維護。這些原則是由美國軟件工程師和講師羅伯特C馬丁(Robert Cecil Martin)提出的許多原則的子集&#xff0c;在他2000年的論文《設計原則與設計模式》中首次提出…

Linux學習筆記之一————什么是Linux及其應用領域

1.1認識Linux 1&#xff09;什么是操作系統 2&#xff09;現實生活中的操作系統 win7 Mac Android iOS 3&#xff09; 操作系統的發展史 &#xff08;1&#xff09;Unix 1965年之前的時候&#xff0c;電腦并不像現在一樣普遍&#xff0c;它可不是一般人能碰的起的&#xff0c;…

Flex中寬度計算

flex 有三個屬性值&#xff0c;分別是 flex-grow&#xff0c; flex-shrink&#xff0c; flex-basis&#xff0c;默認值是 0 1 auto。 發現網上詳細介紹他們的文章比較少&#xff0c; 今天就詳細說說他們&#xff0c;先一個一個看。 flex-grow 定義項目的放大比例&#xff0c;默…

Lucene詳解

一.lucene原理 Lucene 是apache軟件基金會一個開放源代碼的全文檢索引擎工具包&#xff0c;是一個全文檢索引擎的架構&#xff0c;提供了完整的查詢引擎和索引引擎&#xff0c;部分文本分析引擎。它不是一個完整的搜索應用程序&#xff0c;而是為你的應用程序提供索引和搜索功能…

.NET 6.0中使用Identity框架實現JWT身份認證與授權

原文作者&#xff1a;Sarathlal Saseendran原文鏈接&#xff1a;https://www.c-sharpcorner.com/article/jwt-authentication-and-authorization-in-net-6-0-with-identity-framework/翻譯&#xff1a;沙漠盡頭的狼&#xff08;谷歌翻譯加持&#xff09;介紹微軟于 2021 年 11 …

adb devices 里面有很多 emulator-XXXX的解決方法

2019獨角獸企業重金招聘Python工程師標準>>> adb kill-server 轉載于:https://my.oschina.net/sfshine/blog/700354

MQ(Message Queue)簡介

一、何為MQ&#xff1f; MQ全稱為Message Queue, 消息隊列&#xff08;MQ&#xff09;是一種應用程序對應用程序的通信方法。應用程序通過讀寫出入隊列的消息&#xff08;針對應用程序的數據&#xff09;來通信&#xff0c;而無需專用連接來鏈接它們。消息傳遞指的是程序之間通…

【GlobalMapper精品教程】015:矢量面圖層的創建及數字化操作

本文講解在Globalmapper中文23.0中創建矢量面狀數據(政區數據),并進行面狀數據采集及編輯的詳細操作流程,數據為配套案例數據包中的data015.rar。 參考閱讀: ArcGIS實驗教程——實驗三:矢量數據采集與編輯(矢量化) 文章目錄 一、認識工具條1. 數字化(創建)工具條2. 選…

Blazor University (39)JavaScript 互操作 —— 更新 document title

原文鏈接&#xff1a;https://blazor-university.com/javascript-interop/calling-javascript-from-dotnet/updating-the-document-title/更新 document title源代碼[1]在創建 Blazor 布局[2]部分中&#xff0c;我們看到了 Blazor 應用程序如何存在于 HTML&#xff08;或 cshtm…

IIS 日志文件位置

IIS 6 Log files location IIS 6中日志文件的位置%windir%\System32\LogFilesIIS 7 Log files location IIS的日志文件的位置%SystemDrive%\inetpub\logs\LogFiles用戶每打開一次網頁&#xff0c;iis 都會記錄用戶IP、訪問的網頁地址、訪問時間、訪問狀態等信息&#xff0c;這些…

APP測試流程和測試點

1 APP測試基本流程 1.1流程圖 1.2測試周期 測試周期可按項目的開發周期來確定測試時間&#xff0c;一般測試時間為兩三周&#xff08;即15個工作日&#xff09;&#xff0c;根據項目情況以及版本質量可適當縮短或延長測試時間。正式測試前先向主管確認項目排期。 1.3測試資源 測…

39所強基計劃試點高校已全部公布招生簡章

截至目前(4月8日下午) 39所強基計劃試點高校 已全部公布招生簡章 各高校招生要求是什么&#xff1f; 招生專業有哪些&#xff1f; 什么時候報名&#xff1f; 一起來看 北京大學 招生對象及報名條件 各省&#xff08;區、市&#xff09;符合2022年全國普通高等學校招生統…

【ArcGIS錯誤異常100問】之001:License服務無法啟動權威解決辦法

測試環境&#xff1a; 操作系統&#xff1a;Windows10ArcGIS版本&#xff1a;10.X結果&#xff1a;通過測試 文章目錄1. 錯誤提示2. 問題分析3. 解決辦法3.1 關閉Windows Defender3.2 關閉系統防火墻3.3 刪除邁克菲&#xff08;McAfee&#xff09;殺毒軟件3.4 在系統服務中啟動…

Appium wait等待的三種方法

1、sleep()方法Thread.sleep&#xff08;60000&#xff09;強制等待60s2、隱式等待implicitlyWait()driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);全局等待30s不管元素是否已經加載1) 當使用了隱式等待執行測試的時候&#xff0c;如果WebDriver沒有在DOM中…

ASP.NET Core 技術內幕與項目實戰讀后感

前幾天拿到了楊中科老師的新書《ASP.NET Core 技術內幕與項目實戰》&#xff0c;迫不及待的“兩”口氣讀完了。用一句話來總結&#xff0c;這是一本寫給.NET開發者的非常實用的接地氣的好書&#xff0c;感覺有必要自發為這本書宣傳一波。楊老師在 .NET 開發者社區中的知名度非常…

avalon2學習教程15指令總結

avalon的指令在上一節已經全部介紹完畢&#xff0c;當然有的語焉不詳&#xff0c;如ms-js。本節主要總結我對這方面的思考與探索。 MVVM的成功很大一語分是來自于其指令&#xff0c;或叫綁定。讓操作視圖的功能交由形形式式的指令來代勞。VM&#xff0c;成了一個大管家。它只一…

【ArcGIS錯誤異常100問】之002:Error 000735 簡化容差:值是必需的(簡化線、簡化面工具)

測試環境&#xff1a; 操作系統&#xff1a;windows7ArcGIS版本&#xff1a;10.2結果&#xff1a;通過測試 文章目錄1. 錯誤提示2. 問題分析3. 解決辦法4. 問題驗證1. 錯誤提示 在ArcGIS中使用簡化面或者簡化線工具時&#xff0c;點擊確定會提示Error 000735&#xff1a;簡化容…

mybatis中mysql轉義講解

本文為博主原創&#xff0c;未經允許不得轉載&#xff1a; 在mybatis中寫sql的時候&#xff0c;遇到特殊字符在加載解析的時候&#xff0c;會進行轉義&#xff0c;所以在mybatis中 寫sql語句的時候&#xff0c;遇到特殊字符進行轉義處理。 需要注意的是&#xff0c;轉義的字符為…