DotNetCore.RabbitMQ.Extensions介绍

  • 这是一个 基于.NETStandard 2.0的Rabbit轻量级框架,可以让开发人员无需关注底层变动,专注编写业务代码,从而达到便捷开发。

特性

  • DotNetCore.RabbitMQ.Extensions,非常的小巧,下面将介绍 DotNetCore.RabbitMQ.Extensions 的项目框架。
  • 开发设计思路是将Rabbit的连接池,生产者,消费者三种业务类型分层分离,从而实现解耦轻量化。
  • 连接池,生产者,消费者的设计实现逻辑采用适配器设计,实现各自之间单一职责与开闭原则,是非常有利于业务的扩展和维护。
  • 连接池:内置连接池管理,无需重复创建连接和信道,并采用安全线程控制。在这里用户只需要关心配置连接池相关参数。
  • 生产者和消费者:底层已经全部抽象实现,无须关注底层逻辑,在这里用户只需要关心配置生产者/消费者相关参数,并且消费者支持单例多重消费者。
  • 开发人员只需要在Rabbit管控台新建相关的VHost,其他参数(Exchange,Queue,ExchangeType,RoutingKey)全部代码自动帮你建立完好,无须手动新建,解决繁琐操作。
  • 项目 gitbhub 地址:https://github.com/heyehang/DotNetCore.RabbitMQ.Extensions

参数说明

  • HostName,Rabbit所在服务器地址
  • port,端口号
  • username,登录账号名称
  • password,登录密码
  • VHost,虚拟主机
  • Exchange,交换机
  • ExchangeType,交换机类型
  • Queue,队列名称
  • RoutingKey,队列与交换机绑定的key
  • ServiceKey,当前服务的key,推荐:nameof(当前类名)
  • ConnectionKey,当前连接池服务的key,推荐:nameof(当前连接池类名)
  • ConsumerTotal,当前消费队列所对应的消费者数量(默认为1,支持单例多重消费者,继承ConsumerService并重写ConsumerTotal即可)

如何开始?

下载安装 DotNetCore.RabbitMQ.Extensions

安装命令:Install-Package DotNetCore.RabbitMQ.Extensions

连接池

  • 继承ConnectionChannelPool类,并实现相关连接池参数和连接池的唯一标识ConnectionKey。

示例代码

namespace TestCommon
{
public class TestDConnection : ConnectionChannelPool
{
public TestDConnection(ILogger<TestDConnection> logger) : base(logger)
{
} public override RabbitMQOptions opt => new RabbitMQOptions
{
HostName = "localhost",
Port = 5672,
VHost = "testd.host",
UserName = "guest",
PassWord = "guest"
}; public override string ConnectionKey => nameof(TestDConnection);
}
}

生产者

  • 继承PublishService类,并实现相关参数,并且绑定所需要使用的连接池ConnectionKey,发送队列消息:TestDPublish.Publish(objmsg);/await TestDPublish.PublishAsync(objmsg);

示例代码

namespace TestCommon
{
public class TestDPublish : PublishService
{
public TestDPublish(ILogger<TestDPublish> logger, IEnumerable<IConnectionChannelPool> connectionList) : base(logger, connectionList)
{
} public override string ExchangeType => "direct"; public override string Exchange => "testd.ex"; public override string Queue => "testd.query"; public override string RoutingKey => "testd.key"; public override string ConnectionKey => nameof(TestDConnection); public override string ServiceKey => nameof(TestDPublish);
}
}

消费者

  • 继承ConsumerService类,并实现相关参数,并且绑定所需要使用的连接池ConnectionKey,与具体业务消费逻辑。

示例代码

namespace TestCommon
{
public class TestDConsumer : ConsumerService
{
ILogger logger;
public TestDConsumer(ILogger<TestDConsumer> logger, IEnumerable<IConnectionChannelPool> connectionList) : base(logger, connectionList)
{
this.logger = logger;
} public override string Queue => "testd.query"; public override bool AutoAck => true; public override string ServiceKey => nameof(TestDConsumer); public override string ConnectionKey => nameof(TestDConnection); public override void Received(object sender, BasicDeliverEventArgs e)
{
RemoveEnvironmentModel model = new RemoveEnvironmentModel();
try
{
model = JsonConvert.DeserializeObject<RemoveEnvironmentModel>(Encoding.UTF8.GetString(e.Body));
}
catch (Exception)
{
logger.LogError($"{ServiceKey}服务消费解析model错误");
throw;
}
Console.WriteLine($"消费者{ServiceKey}:收到消息");
}
}
}

服务注册

示例代码

IServiceCollection services = new ServiceCollection();

            services.AddLogging();

            //连接池
services.AddSingleton<IConnectionChannelPool, TestDConnection>(); //消费者
services.AddSingleton<IConsumerService, TestDConsumer>(); //生产者
services.AddSingleton<TestDPublish>(); //启动消费监听
IServiceProvider serviceProvider = services.BuildServiceProvider();
var consumerList = serviceProvider.GetService<IEnumerable<IConsumerService>>();
Task.Run(() =>
{
foreach (var e in consumerList)
{
e.Start();
}
});

介绍一款自己实现的rabbit轻量级组件和使用方法的更多相关文章

  1. 介绍4款json的java类库 及 其性能测试

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programming Lan ...

  2. Resty 一款极简的restful轻量级的web框架

    https://github.com/Dreampie/Resty Resty 一款极简的restful轻量级的web框架 开发文档 如果你还不是很了解restful,或者认为restful只是一种规 ...

  3. 介绍一款“对话框”组件之 “artDialog”在项目中的使用

    在实际开发项目中经常会用到对话框组件,提示一些信息.其实有很多,例如:在项目中常用到的“Jquery-UI.Jquery-EasyUI”的.Dialog,他们也很强大,Api文档也很多.今天就介绍一款 ...

  4. Linux下介绍一款不错的HTML编辑器

    编写HTML文档需要编辑器,在windows平台上我们可以用NotePad++,下面介绍一款Linux下的编辑器Komodo Edit,这是一款免费,开源的编辑器. 他对HTML的支持有其独到之处,我 ...

  5. 《介绍一款开源的类Excel电子表格软件》续:七牛云存储实战(C#)

    两个月前的发布的博客<介绍一款开源的类Excel电子表格软件>引起了热议:在博客园有近2000个View.超过20个评论. 同时有热心读者电话咨询如何能够在SpreadDesing中实现存 ...

  6. 介绍一款替代SSMS的sqlserver管理工具 toad for sqlserver5.7

    原文:介绍一款替代SSMS的sqlserver管理工具 toad for sqlserver5.7 toad for sqlserver5.7 虽然SSMS很好很强大,不过有时候使用一些第三方工具可以 ...

  7. 介绍一款小众的IDE

    作为前端工程师的你们平时主要使用什么IDE,atom.webstorm.sublime还是vscode? 今天介绍一款比较小众的IDE,Adobe的开源项目Brackets,提供Windows和OS ...

  8. 介绍两款Linux文件恢复工具,ext3grep与extundelete https://www.cnblogs.com/lazyfang/p/7699994.html

    介绍两款Linux文件恢复工具,ext3grep与extundelete,可能在关键时刻会有所帮助.ext3grep仅对ext3文件系统有效,extundelete对ext3与ext4文件系统都有效  ...

  9. 介绍两款常用的“图表统计图"的插件

    一.相信朋友们在开发的过程中都会使用到“数据统计”的功能,图表的统计更为直观,在这里就介绍两款插件:fusionChart.DataVisualization. 1.fusionChart实际项目中用 ...

随机推荐

  1. nginx+uWSGI+django+virtualenv+superviso发布web服务器

    1.环境依赖 yum groupinstall "Development tools" -y yum install zlib-devel bzip2-devel pcre-dev ...

  2. 领扣(LeetCode)交替位二进制数 个人题解

    给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等. 示例 1: 输入: 5 输出: True 解释: 5的二进制数是: 101 示例 2: 输入: 7 输出 ...

  3. Win32 COM组件 x Android Service

    有些书在介绍和讲解android的Service组件时,会使用后台服务一词,并且与运行在主线程的Activity相对.因为后台一词很容易误解,服务一直运行在后台?什么线程在运行?服务一直有条线程在运行 ...

  4. ArcGIS 重新创建几何服务(GeometryService)

    #参考官方网址:http://enterprise.arcgis.com/zh-cn/server/10.4/administer/windows/re-creating-the-geometry-s ...

  5. 北冥'sfish

    北冥咸鱼,其名为鲲.鲲之大,long long存不下.化而为鸟,其名为鹏.鹏之背,高精被卡废.怒而颓,其码若怪诞之吟.是咸鱼,颓废则将遇上cz.cz谁,大佬也.<大佬说>者,志奆者也.&l ...

  6. opencv简介以及环境搭建

    1.opencv简介 opencv:全称:Open Source Computer Vision Library 是一个跨平台的计算机视觉库 可用于开发实时的图像处理.计算机视觉以及模式识别程序 应用 ...

  7. 高逼格利器之Python闭包与装饰器

    生活在魔都的小明,终于攒够了首付,在魔都郊区买了一套房子:有一天,小明踩了狗屎,中了一注彩票,得到了20w,小明很是欢喜,于是想干脆用这20万来装修房子吧(decoration): 整个装修过程,小明 ...

  8. Echarts自定义折线图例,增加选中功能

    用Echarts图表开发,原本的Echarts图例不一定能满足我们的视觉要求. 下面是Echarts 折线图自定义图例,图例checked选中,相应的折线线条会随之checked,其余未选中的图例对应 ...

  9. Feign超时设置

    转-原文:https://xli1224.github.io/2017/09/22/configure-feign/ 在分析 Feign 源码的时候,我们看到 Feign 构建代理对象是分了几层的,一 ...

  10. Spring面试题集锦(精选)

    以下来自网络收集,找不到原文出处.此次主要为了面试收集,希望对大家有所帮助~~~~ 1.什么是Spring? Spring是一个开源的Java EE开发框架.Spring框架的核心功能可以应用在任何J ...