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.mzph.cn/news/284361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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;…

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;而无需专用连接来链接它们。消息传递指的是程序之间通…

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 在系统服务中启动…

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;简化容…

.NET桌面开发的一些思考

在22日&#xff0c;我在公众号上发布了一条短文字&#xff0c;内容如下&#xff1a;其实在.NET开发大军中&#xff0c;还有一股力量&#xff0c;那就是桌面程序的开发者们。他们很少发声&#xff0c;可能技术成熟&#xff0c;可能太企业化了&#xff0c;也可能我没关注到。最近…

【ArcGIS错误异常100问】之003:属性表中文乱码解决办法总结

测试环境&#xff1a; 操作系统&#xff1a;windows7ArcGIS版本&#xff1a;10.X、Pro结果&#xff1a;通过测试 文章目录1. 错误提示2. 原因分析3. 解决方法4. 问题验证1. 错误提示 如图所示&#xff0c;安装完ArcGIS Pro后&#xff0c;由于计算机系统和应用软件字符编码的问…

大型网站架构演化(二)——应用服务和数据服务分离

随着网站业务的发展&#xff0c;一台服务器逐渐不能满足需求&#xff1a;越来越多的用户访问导致性能越来越差&#xff0c;越来越多的数据导致存储空间不足。这时就需要将应用和数据分离。应用和数据分离后整个网站使用三台服务器&#xff1a;应用服务器、文件服务器和数据库服…

再不自动化就晚啦!优云教你4步打造基于CentOS的产品镜像

随着Linux程序的增多&#xff0c;软件的安装过程中经常出现如下问题&#xff1a; 1、硬件配置类似或者相同时&#xff0c;批量安装系统和软件&#xff0c;希望实现自动化安装&#xff0c;减少安装时间和人为出错。 2、工程实施人员在不同客户现场进行系统和软件安装(硬件配置不…

【ArcGIS错误异常100问】之004:ArcGIS表转Excel超了65535限制解决办法

测试环境&#xff1a; 操作系统&#xff1a;windows7ArcGIS版本&#xff1a;10.2 文章目录1. 错误提示2. 原因分析3. 解决方法1. 错误提示 如下图&#xff0c;当矢量shp图斑数目过多&#xff0c;文件超过了65535条记录时&#xff0c;利用ArcGIS的表转Excel工具处理成Excel文件…

[转]硬核 | Redis 布隆(Bloom Filter)过滤器原理与实战

在Redis 缓存击穿&#xff08;失效&#xff09;、缓存穿透、缓存雪崩怎么解决&#xff1f;中我们说到可以使用布隆过滤器避免「缓存穿透」。 码哥&#xff0c;布隆过滤器还能在哪些场景使用呀&#xff1f; 比如我们使用「码哥跳动」开发的「明日头条」APP 看新闻&#xff0c;如…