【EasyNetQ】- 简介
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】- 简介的更多相关文章
- .NET操作RabbitMQ组件EasyNetQ使用中文简版文档。
本文出自EasyNetQ官方文档,内容为自己理解加翻译.文档地址:https://github.com/EasyNetQ/EasyNetQ/wiki/Quick-Start EasyNetQ简介 Ea ...
- NET操作RabbitMQ组件EasyNetQ
NET操作RabbitMQ组件EasyNetQ使用中文简版文档. 本文出自EasyNetQ官方文档,内容为自己理解加翻译.文档地址:https://github.com/EasyNetQ/EasyNe ...
- [.NET] RabbitMQ 的行为艺术
RabbitMQ 的行为艺术 序 好像,今天已经是 2 月 28 号了. 听说,29.30.31 号放假. 据说,有图,有真相. 目录 简介 环境搭建 示例一:简单的 Hello World 示例二: ...
- Open Source
资源来源于http://www.cnblogs.com/Leo_wl/category/246424.html RabbitMQ 安装与使用 摘要: RabbitMQ 安装与使用 前言 吃多了拉就是队 ...
- RabbitMQ 的行为艺术
RabbitMQ 的行为艺术 目录 简介 环境搭建 示例一:简单的 Hello World 示例二:发布/订阅模式 尝试发现 - 新物种 EasyNetQ 简介 RabbitMQ:一个消息系统,基于 ...
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- REST简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...
随机推荐
- 【PTA 天梯赛训练】QQ帐户的申请与登陆(散列+set模拟)
实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式: 输入首先给出一个正整数N(≤10^5),随后给出N行指令.每行指令的格式为:“命令符(空格)Q ...
- hdu 3966 Aragorn's Story : 树链剖分 O(nlogn)建树 O((logn)²)修改与查询
/** problem: http://acm.hdu.edu.cn/showproblem.php?pid=3966 裸板 **/ #include<stdio.h> #include& ...
- poj 2553 The Bottom of a Graph : tarjan O(n) 存环中的点
/** problem: http://poj.org/problem?id=2553 将所有出度为0环中的点排序输出即可. **/ #include<stdio.h> #include& ...
- Linux入门-第五周
1.磁盘lvm管理,完成下面要求,并写出详细过程: 1) 创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小 为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv; ...
- 转:前端安全之XSS攻击
前端安全 原文链接:https://www.freebuf.com/articles/web/185654.html 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企 ...
- Pro Git 学习笔记
Pro Git 学习笔记 文档地址:Pro Git原文地址:PRO GIT 学习笔记 git常见命令 1.Git起步 初次运行Git前的配置 用户信息 git config --global user ...
- npm install 报错
今天准备在服务器上部署一下pm2,发现 npm install -g pm2 爆出了错误 error Unexpected end of JSON input while parsing near ...
- 阻塞队列之LinkedBlockingQueue
概述 LinkedBlockingQueue内部由单链表实现,只能从head取元素,从tail添加元素.添加元素和获取元素都有独立的锁,也就是说LinkedBlockingQueue是读写分离的,读写 ...
- Go搭建一个Web服务器
package main import ( "fmt" "net/http" "strings" "log" ) fun ...
- C# 隐藏窗口标题栏、隐藏任务栏图标
//没有标题 this.FormBorderStyle = FormBorderStyle.None; //任务栏不显示 this.ShowInTaskbar = false;