.NetCore中简单使用EasyNetQ
前言
我们在.Net中使用RabbitMQ,最原始的就是基于RabbitMQ.Client进行编码,在这个过程中我们需要通过代码约定和维护队列,Exchange等。如果是自行编码封装通用型的RabbitMQ组件还是比较麻烦的,那么是否已经有比较优秀的RabbitMQ封装组件呢----EasyNetQ就是一个封装比较好并且非常方便使用的组件。
EasyNetQ是什么?
EasyNetQ是在RabbitMQ.Client库之上提供服务的组件集合(基于RabbitMQ.Client的进一步封装)。这些封装包括序列化,错误处理,线程编组,连接管理等。它们由mini-IoC容器组成。我们可以轻松地用自己的实现替换任何组件。EasyNetQ官方网站http://easynetq.com/
以下就是EasyNetQ官网的api设计结构图和部分描述信息

.NetCore中简单使用EasyNetQ
注:安装并配置好RabbiMQ(略)
一、注入EasyNetQ
1) 配置RabbitMQ连接信息
"RabbitMqConnetion": "host=localhost;virtualHost=test_vh;username=qingy;password=r3295"

2)在startup.cs中注入EasyNetQ
//注入easynetQ
string mqConnetion = Configuration["RabbitMqConnetion"];
services.AddSingleton(RabbitHutch.CreateBus(mqConnetion));

二、定义消息实体,并实现发送接收消息
1)、定义消息实体和对应业务处理类
[Queue("qingy.SimpleMessaggeCommand", ExchangeName = "qingy.SimpleMessaggeCommand")]
public class SimpleMessaggeCommand
{
/// <summary>
/// Id
/// </summary>
public Guid Id { get; set; }
/// <summary>
/// Message
/// </summary>
public string Message { get; set; }
/// <summary>
/// 消息时间
/// </summary>
public DateTime MessageTime { get; set; }
}
其中[Queue("qingy.SimpleMessaggeCommand", ExchangeName = "qingy.SimpleMessaggeCommand")],可以不指定。easynetq会自动生成相应的queue和exchange,但是为了便于阅读还是指定名称比较好。
订阅消息业务处理
1 public class MyService : IConsumeAsync<SimpleMessaggeCommand>
2 {
3 /// <summary>
4 /// 处理SimpleMessaggeCommand
5 /// </summary>
6 /// <param name="message"></param>
7 /// <returns></returns>
8 [AutoSubscriberConsumer(SubscriptionId = "Simple.SimpleMessagge")]
9 [SubscriptionConfiguration(PrefetchCount = 20)]
10 public Task ConsumeAsync(SimpleMessaggeCommand message)
11 {
12 //TODO logic here
13 Console.WriteLine($"{message.Id.ToString()}---{message.Message}--{message.MessageTime.ToString("yyyy-MM-dd HH:mm:ss")}");
14 return Task.CompletedTask;
15 }
16 }
[AutoSubscriberConsumer(SubscriptionId = "Simple.SimpleMessagge")] 声明subscriptionid,如果确定只有一个订阅者,可以不声明。
[SubscriptionConfiguration(PrefetchCount = 20)] 声明并发处理的数量,一般调试时可以设置为1,进行单条调试测试。
2)注入消息订阅
1 /// <summary>
2 /// 注入消息订阅
3 /// </summary>
4 /// <param name="app"></param>
5 /// <param name="subscriptionPrefix"></param>
6 /// <param name="assembly"></param>
7 /// <returns></returns>
8 public static IApplicationBuilder UseMqSubscribe(this IApplicationBuilder app, string subscriptionPrefix, Assembly assembly)
9 {
10 var services = app.ApplicationServices;
11 var lifeTime = services.GetService<IHostApplicationLifetime>();
12 var bus = services.GetService<IBus>();
13 lifeTime.ApplicationStarted.Register(() =>
14 {
15 var subscriber = new AutoSubscriber(bus, subscriptionPrefix) {
16
17 };
18 subscriber.Subscribe(assembly);
19 subscriber.SubscribeAsync(assembly);
20 });
21 lifeTime.ApplicationStopped.Register(()=> {
22 bus.Dispose();
23 });
24 return app;
25 }
在startup.cs的Configure方法中添加
var ass = Assembly.LoadFrom(Path.Combine(AppContext.BaseDirectory, "Qingy.HubServie.dll"));
app.UseMqSubscribe("Simple", ass);
三、运行测试


.NetCore中简单使用EasyNetQ的更多相关文章
- Netcore中简单使用MemoryCache
用到缓存架构,我们一般都会想到的Redis,因为它支持分布式,高可用,速率非常快.MemoryCache则相对较少提到,但是对于单体项目或者小型项目,memorycache还是是不错的选择.Memor ...
- netcore中的缓存介绍
Cache(缓存)是优化web应用的常用方法,缓存存放在服务端的内存中,被所有用户共享.由于Cache存放在服务器的内存中,所以用户获取缓存资源的速度远比从服务器硬盘中获取快,但是从资源占有的角度考虑 ...
- .NetCore中EFCore的使用整理(二)-关联表查询
EF常用处理关联加载的方式有3中:延迟加载(Lazy Loading).贪婪加载 (Eager Loading)以及显示加载. 一.EF Core 1.1 1.当前的版本,还不支持延迟加载(Lazy ...
- .NetCore中EFCore for MySql整理(三)之Pomelo.EntityFrameworkCore.MySql
一.Pomelo.EntityFrameworkCore.MySql简介 Git源代码地址:https://github.com/PomeloFoundation/Pomelo.EntityFrame ...
- .NetCore中三种注入方式的思考
该篇内容由个人博客点击跳转同步更新!转载请注明出处! .NetCore彻底诠释了"万物皆可注入"这句话的含义,在.NetCore中到处可见注入的使用.因此core中也提供了三种注入 ...
- 深入剖析.NETCORE中CORS(跨站资源共享)
前言 由于现代互联网的飞速发展,我们在开发现代 Web 应用程序中,经常需要考虑多种类型的客户端访问服务的情况:而这种情况放在15年前几乎是不可想象的,在那个时代,我们更多的是考虑怎么把网页快速友好的 ...
- .netcore中的依赖注入
IOC.DI相关概念的理解 1.依赖:简单的讲就是"引用到".例如AccountController.cs引用到IAccountService.cs,那么AccountContro ...
- 中介者模式及在NetCore中的使用MediatR来实现
在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是"网状结构",它要求每个对象都必须知道它需要交互的对象.例如,每个人必须记住他(她)所有朋友的电话:而且, ...
- Asp.NetCore 中Aop的应用
前言 其实好多项目中,做一些数据拦截.数据缓存都有Aop的概念,只是实现方式不一样:之前大家可能都会利用过滤器来实现Aop的功能,如果是Asp.NetCore的话,也可能会使用中间件: 而这种实现方式 ...
随机推荐
- 084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字
084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字 本文知识点:构造方法-this关键字 说明:因为时间紧 ...
- Java知识系统回顾整理01基础01第一个程序01JDK 安装
一.首先第一步看JDK配置成功后的效果 点WIN键->运行(或者使用win+r) 输入cmd命令 输入java -version 注: -version是小写,不能使用大写,java后面有一个空 ...
- MySQL 修改表中的字段,使其自增
例如,我想使字段 id 自增. 1.查看表定义 mysql> DESC user; +----------+-------------+------+-----+---------+------ ...
- Java (三)APACHE Commons IO 常规操作
上一篇:Java (二)基于Eclipse配置Commons IO的环境 例1:查看文件.文件夹的长度(大小). 1 import java.io.File; 2 3 import org.apach ...
- 098 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 02 编写并测试Subject类
098 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 02 编写并测试Subject类 本文知识点:编写并测试Subject类 说明: ...
- 多测师讲解jmeter _图片详解_(全)高级讲师肖sir
- 多测师讲解自动化测试 _RF封装_(三层模式)高级讲师肖sir
rf自动化:分层作用: 1.项目----有重复的流程(借款-登录,出借-登录) 2.借款--登录(8个流程)机器人:案例层(用例)写在机器人中,1个机器人=1条用例 分三个层次: 1.案例层(存放用例 ...
- MeteoInfoLab脚本示例:inpolygon
inpollygon函数是用来判断带坐标(x/y)的数据是否在某个或者一组多边形(Polygon)中,返回的结果中如果做多边形内则值为1,否则值为-1.下面一个例子演示了利用一个shape文件和inp ...
- 如何设计一个牛逼的API接口
在日常开发中,总会接触到各种接口.前后端数据传输接口,第三方业务平台接口.一个平台的前后端数据传输接口一般都会在内网环境下通信,而且会使用安全框架,所以安全性可以得到很好的保护.这篇文章重点讨论一下提 ...
- monolog 日志
1 安装 composer require monolog/monolog 2 使用 // 创建日志服务 $logger = new Logger('my_logger'); // 定义一个handl ...