EasyNetQ 是一个容易使用,坚固的,针对RabbitMQ的 .NET API。

假如你尽可能快的想去安装和运行RabbitMQ,请去看入门指南
EasyNetQ是为了提供一个尽可能简洁的适用与RabbitMQ的.NET类库。为了实现这些目标,EasyNetQ提供一种自认为你会在.NET下使用RabbitMQ的视图。为了保持使用灵活性,简单起见,EasyNetQ强制使用了一些简单的约定。包括如下:

  • 消息用 .NET 类型表示
  • 消息通过.NET类型路由

这意味着消息必须用 .NET class定义。每一个你想发送的不同的消息类型必须用一个class表示。这个类必须是public并带有一个默认构造函数和可以读写的属性。在这个消息中,你通常不需要实现任何功能。仅仅把这个消息单做一个简单的数据容器或者DTO。下面是一个简单的消息。

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

EasyNetQ通过消息的类型来路由。当你发布一个消息,EasyNetQ会检查消息类型, 然后给它一个基于类型名称、命名空间和程序集的路由键。在消费者端,消费者去订阅这个类型。在订阅这个类型之后,消费者就会得到这个类型的消息。

默认情况下,EasyNetQ使用Newtonsoft.Json 序列化.NET类型为JSON.这样有一个好处就是消息对与人类可读性好。因此你能够使用类似于RabiitMQ 管理端应用去调试消息问题。

API 设计

EasyNetQ是一个在RabbitMQ.Client类库之上提供服务的组件集合。做了这些事情,像序列化、错误处理、线程管理、连接管理等。通过一个Mini-Ioc容器组织在一起。你能很容易用你自己实现去替换这些组件。所以如果你喜欢用XML 序列化而不是用JSON,仅仅需要以一个ISerializer的实现,然后注册到这个容器中。

这些组件最上层是IAdvancedBus API。这看起来很像AMQP规格。实际也是你能够通过这个API运行很多AMQP方法。这个API对你隐藏了唯一AMQP概念是channels。这是因为channels 是一个复杂的底层概念,不应该被放到AMQP部分规格的第一的位置。 坦白来说,这个API中 ‘Advanced’不是一个非常好的名字。用‘lamqp’可能更好些。

这个顶层高级API是一系列消息模式:Publish/Subscribe, Request/Response,和 Send/Receive. 这是EasyNetQ坚持的设计思想。这些模式是我们应该实现的。这样有非常小的弹性。要么你接受我的处理方法,或者你就不要去使用。这样做的目的是,不用你和使用者花费精力去重新发明轮子。你不需要每一次去做选择,你只需要简单的去Publish和Subscribe消息。这样设计是未来实现EasyNetQ的核心目标,即尽可能简单的使用RabbitMQ。

这些模式的后面是这个 IBus API. 再一次看到这个一个简单的名字,它跟消息总线概念有关。IPackagedMessagePatterns可能是一个更好名字。

80%的用户的工作,在80%的时间都会使用IBus。它不是完备的API,如果这个模式下,你想实现的功能这个IBus没有提供,那么你应该使用IAdvancedBus。这样使用没有问题,EasyNetQ就这这样设计使用的。

为什么我需要EasyNetQ?

RabbitMQ不是已经有了 .NET client?
确实如此。你可以在这里下载 .NET AMQP 客户端类库。

那么为什么我需要EasyNetQ呢?RabbitMQ .NET client 实现了AMQP协议的客户端(RabbitMQ实现了服务器端)。 AMQP是为HTTP协议设计的。它的设计是跨平台的和与语言无关的。它也旨在灵活支持多种基于交换/绑定/队列模型的消息传递模式。

RabiitMQ Client 非常地灵活,但是伴随着灵活性而来是复杂性。这意味着你为了需要写大量代码,以便执行RabbitMQ client。通常,这些代码包括一下这些:

  • 实现消息传递模式,例如Publish/Subscribe或Request/Response。尽管,公平来讲,这个 .NET client 也提供了一些这样的支持。

  • 实现路由策略。你将需要设计你如何去 exchange-queue 绑定。并且你将设计怎样在生产者和消费者之间进行消息路由。

  • 实现消息的序列化/反序列化。 你将如何转换AMQP的二进制消息为你编程语言能理解的格式?

  • 为订阅去实现一个消费者线程。你将需要有一个专门的消费者循环等待你订阅的消息。你会如何处理多个订阅者,或者瞬间订阅者,像哪些等待答复的请求。

  • 实现消费者重新连接。假如连接崩溃了或者RabbitMQ 服务挂了,你怎样能检测到并确保你所有的订阅都能被重建?

  • 懂得和实施服务质量设置。你需要什么样的设置来确保一个可靠的客户端。

  • 实现一个错误处理策略。假如接受到一个错误的消息,或者发生一个未处理异常被抛出,你的客户端应该做什么呢?

  • 实现发布者可靠的消息确认。

EasyNetQ目标是在AMQP之上封装所有这些关注点在一个简单好用的类库中。EasyNetQ有在高容量商业环境中数年使用RabbitMQ的经验。

性能评估

EasyNetQ的性能直接跟RabbitMQ broker的性能相关。这可能随着网络和服务器性能不同而不同。在一个开发者机器上用本地RabbitMQ实例上测试,持续通宵执行实现了每秒50002K消息送到。每个EasyNetQ 终结点在一夜中稳定运行。

原文地址:https://github.com/EasyNetQ/EasyNetQ/wiki/Introduction

EasyNetQ介绍的更多相关文章

  1. EasyNetQ使用(一)【介绍】

    EasyNetQ 是一个容易使用,专门针对RabbitMQ的 .NET API. 假如你尽可能快的想去安装和运行RabbitMQ,请去看入门指南.EasyNetQ是为了提供一个尽可能简洁的适用与Rab ...

  2. C# .net 使用rabbitmq消息队列——EasyNetQ插件介绍

    EasyNetQ 是一个简洁而适用的RabbitMQ .NET类库,本质上是一个在RabbitMQ.Client之上提供服务的组件集合.

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

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

  4. 简单易用的.NET免费开源RabbitMQ操作组件EasyNetQ解析

    对于目前大多的.NET项目,其实使用的技术栈都是差不多,估计现在很少用控件开发项目的了,毕竟一大堆问题.对.NET的项目,目前比较适合的架构ASP.NET MVC,ASP.NET WebAPI,ORM ...

  5. RabbitMQ安装配置和基于EasyNetQ驱动的基础使用

    一.RabbitMQ基本概念和原理 1.AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计. 2.Ra ...

  6. 【框架学习与探究之消息队列--EasyNetQ(1)】

    前言 本文欢迎转载,实属原创,本文原始链接地址:http://www.cnblogs.com/DjlNet/p/7603554.html 废话 既然都是废话了,所以大家就可以跳过了,这里是博主有事没事 ...

  7. 使用EasyNetQ组件操作RabbitMQ消息队列服务

    RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现,是实现消息队列应用的一个中间件,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合, ...

  8. .NET Core微服务之基于EasyNetQ使用RabbitMQ消息队列

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.消息队列与RabbitMQ 1.1 消息队列 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更 ...

  9. .net core使用EasyNetQ做EventBus

    随着SOA.微服务.CQRS的盛行,EventBus越来越流行,上GitHub搜了一下,还是有蛮多的这类实现,老牌的有NServiceBus(收费).MassTransit,最近的有CAP(国人写的, ...

随机推荐

  1. 主流服务器apache,iis,tomcat,jboss,resion,weblogic,websphere的区别

    在互联网高速发展的今天,不同种类的网站大量涌现,每个人都在享受着网络服务带来的便利.而创建自己的个性化网站的门槛不断降低.从事网站架构,这种当年的绝对“”高科技“”绝活.也从it人员的专利“”沦落“” ...

  2. 利用VBS下载EXE文件手法记录

    1.信息来源 疑似朝鲜通过鱼叉攻击韩国统一部记者的APT事件整理 https://mp.weixin.qq.com/s/4IFV31MBNbANnCVaJj7ZPQ https://twitter.c ...

  3. C语言字节对齐 __align(),__attribute((aligned (n))),#pragma pack(n)【转】

    转自:https://www.cnblogs.com/ransn/p/5081198.html 转载地址 : http://blog.csdn.net/21aspnet/article/details ...

  4. python包管理之Pip安装及使用

    Python有两个著名的包管理工具easy_install.py和pip.在Python2.7的安装包中,easy_install.py是默认安装的,而pip需要我们手动安装. pip可以运行在Uni ...

  5. ***文件上传控件bootstrap-fileinput的使用和参数配置说明

    特别注意:    引入所需文件后页面刷新查看样式奇怪,浏览器提示错误等,可能是因为js.css文件的引用顺序问题,zh.js需要在fileinput.js后面引入.bootstrap最好在filein ...

  6. CSS工具之CSS重置(CSS Reset)

    css代码: /* v1.0 | 20080212 */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, ...

  7. Java第三阶段学习(十二、HttpServletRequest与HttpServletResponse)

    一.HttpServletRequest 1.概述: 我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和 ...

  8. Java第三阶段学习(十一、Servlet基础、servlet中的方法、servlet的配置、ServletContext对象)

    一.Servlet简介  1.什么是servlet: sun公司提供的一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是java代码,通过java的API动态的向 ...

  9. Lambda表达式浅析

    Lambda 表达式是一种可用于创建"委托"或"表达式目录树"类型的"匿名函数".通过使用 lambda 表达式,可以写入可作为参数传递或作 ...

  10. 谈谈MySQL中的降序索引 order by id DESC / ASC

    今天这篇主要讲order by 语句中的多个字段asc desc的问题.mysql5中,索引存储的排序方式是ASC的,没有DESC的索引.现在能够理解为啥order by 默认是按照ASC来排序的了吧 ...