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. session和cookie的介绍

    1.将cookie,session之前,还是先说说http协议 http协议是基于TCP/UDP之上的应用层一个标准 请求,响应的模式.是你必须先请求到一个服务端之后,服务端才会响应到你.他是不会无缘 ...

  2. 【CodeForces 915 C】Permute Digits(思维+模拟)

    You are given two positive integer numbers a and b. Permute (change order) of the digits of a to con ...

  3. SAP存储税率税码的相关表

    T007A 稅關鍵字 T007B 會計中的稅務處理 T007C Groupings for tax codes T007D 賦稅群組的內文 T007F 銷項 / 進項群組的稅 T007G 不再使用該表 ...

  4. jdbc学习笔记02

    数据库连接池 DBCP DataBase Conection Pool:数据库连接池 如果没有数据库连接池,每一次业务都需要服务器和数据库服务器建立一次连接,业务处理完连接断开,如果有1万次业务处理, ...

  5. Apache Maven(六):存储库

    Maven 存储库主要是存放一些第三方依赖jar包等. 严格来说,只有两种存储库:本地和远程,本地存储库是指您远程下载到本地的一个缓存,还包含尚未发布的临时构建文件.远程存储库是指一些可以通过各种协议 ...

  6. MySQL的边角料

    //1查询对应数据库所有的表 SELECT * FROM information_schema.`TABLES` WHERE TABLE_SCHEMA ="数据库名" 2 查询数据 ...

  7. nodeJs 对 Mysql 数据库的 curd

    var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : ' ...

  8. Windows使用Node.js自动生成Vue.js模版环境部署步骤-----记录

    node.js官网下载并安装node 进入node文档目录下,运行cmd 输入 node -v 查看node版本 出现表示安装完成 输入 npm -v 显示npm版本信息 安装cnpm 输入 npm ...

  9. 基于jQuery的2048小游戏设计(网页版)

    上周模仿一个2048小游戏,总结一下自己在编写代码的时候遇到的一些坑. 游戏规则:省略,我想大部分人都玩过,不写了 源码地址:https://github.com/xinhua6/2048game.g ...

  10. Educational Codeforces Round 47 (Rated for Div. 2) :E. Intercity Travelling

    题目链接:http://codeforces.com/contest/1009/problem/E 解题心得: 一个比较简单的组合数学,还需要找一些规律,自己把方向想得差不多了但是硬是找不到规律,还是 ...