ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

EasyNetQ笔记-1介绍

2020-09-05 08:33:37  阅读:419  来源: 互联网

标签:EasyNetQ 例如 AMQP 笔记 IBus RabbitMQ 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?那么为什么我需要EasyNetQ呢?
RabbitMQ .NET client 实现了AMQP协议的客户端(RabbitMQ实现了服务器端)。 AMQP是为HTTP协议设计的。它的设计是跨平台的和与语言无关的。它也旨在灵活支持多种基于交换/绑定/队列模型的消息传递模式。
RabiitMQ Client 非常地灵活,但是伴随着灵活性而来是复杂性。这意味着你为了需要写大量代码,以便执行RabbitMQ client。
通常,这些代码包括一下这些:

  • 实现消费者重新连接。假如连接崩溃了或者RabbitMQ 服务挂了,EasyNetQ将恢复轮询终结点直到重新连接成功
  • 实现消息传递模式,例如Publish/Subscribe或Request/Response。尽管,公平来讲,这个 .NET client也提供了一些这样的支持。
  • 实现路由策略。你将需要设计你如何去 exchange-queue 绑定。并且你将设计怎样在生产者和消费者之间进行消息路由。
  • 实现消息的序列化/反序列化。 你将如何转换AMQP的二进制消息为你编程语言能理解的格式?
  • 为订阅去实现一个消费者线程。你将需要有一个专门的消费者循环等待你订阅的消息。你会如何处理多个订阅者,或者瞬间订阅者,像哪些等待答复的请求。
  • 懂得和实施服务质量设置。你需要什么样的设置来确保一个可靠的客户端。
  • 实现一个错误处理策略。假如接受到一个错误的消息,或者发生一个未处理异常被抛出,你的客户端应该做什么呢?
  • 实现发布者可靠的消息确认。
    EasyNetQ目标是在AMQP之上封装所有这些关注点在一个简单好用的类库中。EasyNetQ有在高容量商业环境中数年使用RabbitMQ的经验。

连接字符串

使用EasyNetQ最简单的办法是通过IBus接口,标准的做法是在你应用的生命周期内只创建一个IBus实例.当你的应用关闭后Dispose掉它。
创建一个IBus实例如下:

var bus = RabbitHutch.CreateBus("host=myServer;virtualHost=myVirtualHost;username=mike;password=topsecret")

连接字符串:

host(例如 host=192.168.2.56)这个字段是必选的。如要具体指定你要连接服务器端口,你用标准格式 host:port(例如:host=myhost.com:5673)。假如你省略了端口号,AMQP默认端口是5672.连接到RabbitMQ集群,需要指定每一个集群节点用逗号分隔(例如:host:myhost1.com,myhost2.com,myhost3.com).详情参考Cluster Support

virtualhost(例如:virtualHost=myVirturalHost)默认虚拟主机是’/’

username(例如:username=mike)默认是’guest’(对于非’localhost’主机你需要使用其他用户名)

password (例如:password=mysecret)默认为’guest’

requestedHearbeat(例如:requestHearbeat=10)默认为10秒钟。没有心跳设置为0

prefetchcount(例如:prefetchcount=1) 默认为50.这个值是在EasyNetQ发送ack之前发送给RabbitMQ的消息数。不限制设置为0(不推荐). 为了在消费者之间保持公平和平衡设置为1.

publisherConfirms(例如:publisherconfirms=true)默认是false。

persistentMessages(例如:persistentMessages=false)默认为true。这个决定了在发送消息时采用什么样的delivery_mode。 false=1,true=2. 设置为true,RabbitMQ将会把消息持久化到磁盘,并且在服务器重启后仍会存在。设置为false可以提高性能收益。

product(例如:product=我的现实中重要的服务)在EasyNetQ 0.27.3中被引进。默认值是Bus的实例名。此处输入的值将显示在RabbitMQ的后台管理界面中。

platform(例如:platform=my.fully.qualified.domain.name)在EasyNetQ 0.27.3中被引进。默认值是运行着客户端处理Bus的实例的机器的主机名。此处输入的值将会线上在RabbitMQ管理端界面中。

timeout(例如:timeout=60)模式值为10秒。在EasyNet 0.17中被引进。可解析类型为System.UInt16从0到65535范围内的值。不限制超时时间设置为0.当超时事时抛出System.TimeoutException.

参考:
https://github.com/EasyNetQ/EasyNetQ/wiki/Quick-Start

标签:EasyNetQ,例如,AMQP,笔记,IBus,RabbitMQ,API,介绍
来源: https://www.cnblogs.com/fanfan-90/p/13617027.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有