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. c++:请编写一个函数,对字符串“zheshigekendiedetimu”按从大到小的顺序排列,并截取后n位数(n为函数的一个参数)。

    String str="zheshigekendiedetimu"; StringBuffer buff=new StringBuffer(str); char[] arr=str ...

  2. 【赛事总结】◇赛时·8◇ AGC-027

    [赛时·8]AGC-027 日常AGC坑……还好能涨Rating +传送门+ ◇ 简单总结 感觉像打多校赛一样,应该多关注一下排名……考试的时候为了避免影响心态,管都没有管排名,就在那里死坑B题.最后 ...

  3. SAP销售订单屏幕字段控制隐藏,必输等

    1.T-CODE:shd0 创建变式  , 点击确认按钮后,SAP进入下一个屏幕,然后重复上面的操作,直到所有屏幕已完成设置. 如果后续屏幕不需要设置,可点击“退出并保存”按钮.保存后,进入下图所示页 ...

  4. ABAP术语-ISO (International Organization for Standardization)

    ISO (International Organization for Standardization) 原文:http://www.cnblogs.com/qiangsheng/archive/20 ...

  5. kali下添加用户和权限分配

    1.添加用户 useradd -m test #-m的意思是创建用户的主目录 2.为用户test设置密码. passwd test 3.为添加的用户赋予权限(-a 添加 :-G 群组) 如果没有这一步 ...

  6. flask迁移

    from flask_script import Managerfrom flask_migrate import Migrate, MigrateCommandfrom info import cr ...

  7. ListView学习

    ListView类 常用的基本属性 FullRowSelect:设置是否行选择模式.(默认为false)提示:只有在Details视图,该属性有效. GridLines:设置行和列之间是否显示网格线. ...

  8. POJ1679(次小生成树)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36692   Accepted: 13368 ...

  9. elasticsearch 拼音+ik分词,spring data elasticsearch 拼音分词

    elasticsearch 自定义分词器 安装拼音分词器.ik分词器 拼音分词器: https://github.com/medcl/elasticsearch-analysis-pinyin/rel ...

  10. Hbase表格设计

    Rowkey设计 Region: 基于RowKey的分区,可理解成MySQL的水平切分. 每个Region Server就是Hadoop集群中一台机器上的一个进程. 比如我们的有1-300号的RowK ...