EasyNetQ是一个简单易用的,稳定的的RabbitMQ .NET API 。

如果您只想尽快启动并运行,请转到“ 快速开始”指南。

EasyNetQ的目标是提供一个库,使得在.NET中使用RabbitMQ尽可能简单。为了做到这一点,它必须采取一种自以为是的观点,看看你应该如何使用RabbitMQ和.NET。它通过执行一些简单的约定来简化灵活性。这些包括:

  • 消息应由.NET类型表示。
  • 消息应按其.NET类型进行路由。

这意味着消息由.NET类定义。您要发送的每种不同的消息类型都由类表示。该类应该是公共的,具有默认构造函数和公共读/写属性。您通常不会在消息中实现任何功能,而是将其视为简单数据容器或数据传输对象(DTO)。这是一个简单的消息:

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

EasyNetQ按类型路由消息。发布消息时,EasyNetQ会检查其类型,并根据类型名称,命名空间和程序集为其提供路由密钥。在消费方面,订阅者订阅了一种类型。订阅类型后,该类型的消息将路由到订户。

默认情况下,EasyNetQ使用Newtonsoft.Json库将.NET类型序列化为JSON。这样做的好处是消息是人类可读的,因此您可以使用RabbitMQ管理应用程序等工具来调试消息问题。

API设计

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的设计使用方式。

我为什么需要EasyNetQ?

RabbitMQ还没有.NET客户端吗?

是的,它确实。您可以在此处下载.NET AMQP客户端库。

那为什么我需要EasyNetQ?RabbitMQ .NET客户端实现了AMQP协议的客户端(RabbitMQ实现了服务器端)。AMQP旨在作为消息传递的HTTP。它旨在跨平台和语言无关。它还可以基于Exchange / Binding / Queue模型灵活地支持各种消息传递模式。

拥有这种灵活性非常棒,但灵活性带来了复杂性。这意味着您需要编写大量代码才能实现RabbitMQ客户端。通常,此代码包括:

  • 实现消息传递模式,例如发布/订阅或请求/响应。虽然,公平地说,.NET客户端确实提供了一些支持。
  • 实施路由策略。您将如何设计交换队列绑定,以及如何在生产者和消费者之间路由消息?
  • 实现消息序列化/反序列化。如何将AMQP中消息的二进制表示转换为编程语言理解的内容?
  • 为订阅实现一个消费者线程。您需要有一个专用的消费者循环来等待您订阅的消息。您将如何处理多个订户或临时订户,例如等待请求响应的订户?
  • 实现用户重新连接。如果连接中断或RabbitMQ服务器退出,您如何检测它并确保重建所有订阅?
  • 了解并实施服务质量设置。您需要进行哪些设置才能确保拥有可靠的客户端。
  • 实施错误处理策略。如果收到格式错误的消息,或者抛出了意外的异常,您的客户应该怎么做?
  • 实施发布者确认可靠的消息传递。

EasyNetQ旨在将所有这些问题封装在一个简单易用的库中,该库位于现有AMQP客户端之上。这是RabbitMQ在大批量商业环境中使用数年的经验的结晶。

业绩预期

EasyNetQ的性能与RabbitMQ代理的性能直接相关。这可能因网络和服务器性能而异。在具有RabbitMQ本地实例的开发人员计算机上进行的测试中,实现了每秒约5000条2K消息的持续夜间性能。所有EasyNetQ端点的内存使用在夜间运行时都是稳定的。

【EasyNetQ】- 简介的更多相关文章

  1. .NET操作RabbitMQ组件EasyNetQ使用中文简版文档。

    本文出自EasyNetQ官方文档,内容为自己理解加翻译.文档地址:https://github.com/EasyNetQ/EasyNetQ/wiki/Quick-Start EasyNetQ简介 Ea ...

  2. NET操作RabbitMQ组件EasyNetQ

    NET操作RabbitMQ组件EasyNetQ使用中文简版文档. 本文出自EasyNetQ官方文档,内容为自己理解加翻译.文档地址:https://github.com/EasyNetQ/EasyNe ...

  3. [.NET] RabbitMQ 的行为艺术

    RabbitMQ 的行为艺术 序 好像,今天已经是 2 月 28 号了. 听说,29.30.31 号放假. 据说,有图,有真相. 目录 简介 环境搭建 示例一:简单的 Hello World 示例二: ...

  4. Open Source

    资源来源于http://www.cnblogs.com/Leo_wl/category/246424.html RabbitMQ 安装与使用 摘要: RabbitMQ 安装与使用 前言 吃多了拉就是队 ...

  5. RabbitMQ 的行为艺术

    RabbitMQ 的行为艺术 目录 简介 环境搭建 示例一:简单的 Hello World 示例二:发布/订阅模式 尝试发现 - 新物种 EasyNetQ 简介 RabbitMQ:一个消息系统,基于 ...

  6. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  7. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  8. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  9. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

随机推荐

  1. poj_2773_Happy 2006

    Two positive integers are said to be relatively prime to each other if the Great Common Divisor (GCD ...

  2. iOS中出现"Check dependenciesWarning: The Copy Bundle Resources build phase contains this target's Info.plist file..."的解决办法A

    出现场景   项目中移除info.plist ,后来又重新拖拽回来,同时勾选了Copy items if needed 解决办法 1.删除(删除时选择Remove Reference) 2.重新添加i ...

  3. Hadoop(11)-MapReduce概述和简单实操

    1.MapReduce的定义 2.MapReduce的优缺点 优点 缺点 3.MapReduce的核心思想 4.MapReduce进程 5.常用数据序列化类型 6.MapReduce的编程规范 用户编 ...

  4. linux的date常用命令

    1.显示现在时间 date 2.显示今天日期 date +"%F" date +"%Y-%m-%d" 3.现在时间转化为时间戳 date +%s 4.指定某日期 ...

  5. 网站漏洞修复之最新版本UEditor漏洞

    UEditor于近日被曝出高危漏洞,包括目前官方UEditor 1.4.3.3 最新版本,都受到此漏洞的影响,ueditor是百度官方技术团队开发的一套前端编辑器,可以上传图片,写文字,支持自定义的h ...

  6. [BZOJ2809][Apio2012]dispatching(左偏树)

    首先对于一个节点以及它的子树,它的最优方案显然是子树下选最小的几个 用左偏树维护出每棵子树最优方案的节点,记录答案 然后它的这棵树可以向上转移给父节点,将所有子节点的左偏树合并再维护就是父节点的最优方 ...

  7. 前端面试题目汇总摘录(JS 基础篇 —— 2018.11.02更新)

    温故而知新,保持空杯心态 JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string type ...

  8. grunt in webstorm

    1.install grunt sudo npm install -g grunt-cli npm install grunt --save-dev

  9. CentOS7安装Oracle 11gR2 图文详解

    注:Oracle11gR2 X64安装 一.环境准备 安装包: 1.VMware-workstation-full-11.1.0-2496824.exe 2.CentOS-7-x86_64-DVD-1 ...

  10. 环境变量 - Maven

    Linux 1. 备份并编辑配置文件 # cp /etc/profile /etc/profile.bak # vi /etc/profile 2. 设置Maven环境变量 export MAVEN_ ...