.net core集成使用EasyNetQ来使用rabbitmq
之前有写到一篇介绍EasyNetQ的博文(C# .net 使用rabbitmq消息队列——EasyNetQ插件介绍),所以本文从.net core的角度去继承使用EasyNetQ,而用法类似于之前集成使用rabbitmq的博文:.net core使用rabbitmq消息队列 (二)
国际惯例,先上代码,但是代码比较多,所有又放gitee了:https://gitee.com/shanfeng1000/dotnetcore-demo/tree/master/EasyNetQ
消息发布(AspNetCore.WebApi.Producer)
Demo中这个项目是消息的发布程序,在Startup中添加服务:

public void ConfigureServices(IServiceCollection services)
{
var connectionString = "host=192.168.209.133;virtualHost=/;username=admin;password=123456;timeout=60";
string[] hosts = new string[] { "192.168.209.133", "192.168.209.134", "192.168.209.135" };
ushort port = 5672;
string userName = "admin";
string password = "123456";
string virtualHost = "/";
var arguments = new Dictionary<string, object>() { { "x-queue-type", "classic" } }; #region 订阅发布 services.AddEasyNetQProducer("Publish", options =>
{
//options.ConnectionString = connectionString;
options.Hosts = hosts;
options.Port = port;
options.Password = password;
options.UserName = userName;
options.VirtualHost = virtualHost; options.PersistentMessages = true;
options.Priority = 1;
}); #endregion
#region 请求响应 services.AddEasyNetQProducer("Request", options =>
{
//options.ConnectionString = connectionString;
options.Hosts = hosts;
options.Port = port;
options.Password = password;
options.UserName = userName;
options.VirtualHost = virtualHost; options.PersistentMessages = true;
options.Priority = 3;
}); #endregion
#region 发送接收 services.AddEasyNetQProducer("Send", options =>
{
//options.ConnectionString = connectionString;
options.Hosts = hosts;
options.Port = port;
options.Password = password;
options.UserName = userName;
options.VirtualHost = virtualHost; options.Priority = 4;
options.Queue = "send-recieve";
}); #endregion
......
}
ConfigureServices
添加相关服务使用AddEasyNetQProducer方法,可以指定一个名称,在创建生产者时可以提供指定的名称。熟悉EasyNetQ的朋友应该知道它提供三种消息模式:Publish/Subscribe, Request/Response和 Send/Receive,正是上面的三种申明方式。
使用时,需要先注入IBusClientFactory对象,使用它的Create方法创建生产者对象,然后使用这个对象的方法操作消息(Publish方法、Request方法、Send方法分别对应上面的三种模式)。
另外,EasyNetQ的消息都是一些自定的实体类,因此我们发送消息需要自定创建实体类,比如发布订阅消息时创建的实体类Subscriber:
public class Subscriber
{
public string Message { get; set; }
}
使用时:
/// <summary>
/// 发布订阅模式
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
[HttpGet("Publish")]
public string Publish(string message)
{
message = message ?? "";
var bus = busFactory.Create("Publish");
bus.Publish(new Subscriber() { Message = message }); return "success";
}
消息消费(AspNetCore.WebApi.Consumer)
首先,在Startup中添加服务:

public void ConfigureServices(IServiceCollection services)
{
var connectionString = "host=192.168.209.133;virtualHost=/;username=admin;password=123456;timeout=60";
string[] hosts = new string[] { "192.168.209.133", "192.168.209.134", "192.168.209.135" };
ushort port = 5672;
string userName = "admin";
string password = "123456";
string virtualHost = "/";
var arguments = new Dictionary<string, object>() { { "x-queue-type", "classic" } }; #region 订阅发布 services.AddEasyNetQConsumer(options =>
{
//options.ConnectionString = connectionString;
options.Hosts = hosts;
options.Port = port;
options.Password = password;
options.UserName = userName;
options.VirtualHost = virtualHost; options.AutoDelete = true;
options.Durable = true;
options.PrefetchCount = 1;
options.Priority = 2;
})
.AddSubscriber("PubSub1",typeof(EasyNetQSubscriber))
.AddSubscriber<Subscriber>("PubSub2", r =>
{
Console.WriteLine("PubSub:" + r.Message);
}); #endregion
#region 请求响应 services.AddEasyNetQConsumer(options =>
{
//options.ConnectionString = connectionString;
options.Hosts = hosts;
options.Port = port;
options.Password = password;
options.UserName = userName;
options.VirtualHost = virtualHost; options.Durable = true;
options.PrefetchCount = 2;
})
.AddResponder(typeof(EasyNetQResponder))
.AddResponder<Requester, Responder>(request =>
{
Console.WriteLine("Rpc:" + request.Data);
return new Responder() { Result = "Rpc:" + request.Data };
}); #endregion
#region 发送接收 services.AddEasyNetQConsumer(options =>
{
//options.ConnectionString = connectionString;
options.Hosts = hosts;
options.Port = port;
options.Password = password;
options.UserName = userName;
options.VirtualHost = virtualHost; options.Priority = 5;
options.PrefetchCount = 5;
options.Exclusive = false;
options.Arguments = arguments;
options.Queue = "send-recieve";
})
.AddReceiver(typeof(EasyNetQReceiver<Reciever1>))
.AddReceiver(typeof(EasyNetQReceiver<Reciever2>));
//.AddReceiver<Reciever1>(r =>
//{
// Console.WriteLine("Reciever1:" + r.Message);
//})
//.AddReceiver<Reciever2>(r =>
//{
// Console.WriteLine("Reciever2:" + r.Message);
//}); #endregion ......
}
ConfigureServices
这里先使用AddEasyNetQConsumer方法获得一个消费者建造者,然后使用它的AddSubscriber方法、AddResponder方法、AddReceiver方法添加消费消息的处理过程,当然这三个方法分别也是对应上面的三种模式。
另外,这三个方法添加的消息处理程序可以使用Lambda表达式实现,也可以通过响应的接口实现,比如AddSubscriber方法添加的处理程序可通过实现了IEasyNetQSubscriber<T>接口的类来替代,比如Demo中的EasyNetQSubscriber:
public class EasyNetQSubscriber : IEasyNetQSubscriber<Subscriber>
{
public void Subscribe(Subscriber message)
{
Console.WriteLine("EasyNetQSubscriber:" + message.Message);
}
}
.net core集成使用EasyNetQ来使用rabbitmq的更多相关文章
- .net core集成使用consul
快速启动一个consul集群可以参考:使用docker快速部署一个consul集群 .net core集成使用consul是通过consul提供出来api接口来实现的,可以分成两个部分来说明:配置集成 ...
- ABP官方文档翻译 6.2.1 ASP.NET Core集成
ASP.NET Core 介绍 迁移到ASP.NET Core? 启动模板 配置 启动类 模块配置 控制器 应用服务作为控制器 过滤器 授权过滤器 审计Action过滤器 校验过滤器 工作单元Acti ...
- 使用EasyNetQ组件操作RabbitMQ消息队列服务
RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现,是实现消息队列应用的一个中间件,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合, ...
- asp.net core 集成 log4net 日志框架
asp.net core 集成 log4net 日志框架 Intro 在 asp.net core 中有些日志我们可能想输出到数据库或文件或elasticsearch等,如果不自己去实现一个 Logg ...
- [Abp 源码分析]十七、ASP.NET Core 集成
0. 简介 整个 Abp 框架最为核心的除了 Abp 库之外,其次就是 Abp.AspNetCore 库了.虽然 Abp 本身是可以用于控制台程序的,不过那样的话 Abp 就基本没什么用,还是需要集合 ...
- Net Core集成Exceptionless分布式日志功能以及全局异常过滤
Net Core集成Exceptionless分布式日志功能以及全局异常过滤 相信很多朋友都看过我的上篇关于Exceptionless的简单入门教程[asp.Net Core免费开源分布式异常日志收集 ...
- Asp.Net Core 集成 Hangfire 配置使用 Redis 存储
Hangfire 官方支持 MSSQL 与 Redis(Hangfire.Pro.Redis) 两种 ,由于我的数据库是 MYSQL ,粗略查询了一下文档,现在对 .NET Core 支持的并不够好, ...
- asp.net core集成MongoDB
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.前言及MongoDB的介绍 最近在整合自己的框架,顺便把MongoDBD的最简单CRUD重构一下作为组件化集成到asp.net ...
- asp.net core集成CAP(分布式事务总线)
一.前言 感谢杨晓东大佬为社区贡献的CAP开源项目,传送门在此:.NET Core 事件总线,分布式事务解决方案:CAP 以及 如何在你的项目中集成 CAP[手把手视频教程],之前也在工作中遇到分布式 ...
随机推荐
- go goroutines 使用小结
go +方法 就实现了一个并发,但由于环境不同,需要对并发的个数进行限制,限制同一时刻并发的个数,后面称此为"并发限流". 为什么要并发限流? 虽然GO M+P+G的方式号称可以轻 ...
- 编译安装haproxy2.0
先解决lua环境,(因为centos自带的版本不符合haproxy要求的最低版本(5.3)先安装Lua依赖的包 [root@slave-master lua-5.3.5]# yum install ...
- SprignBoot整合Spring Data Elasticsearch
一.原生java整合elasticsearch的API地址 https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.2/java ...
- 【Java 8】函数式接口(一)—— Functional Interface简介
什么是函数式接口(Functional Interface) 其实之前在讲Lambda表达式的时候提到过,所谓的函数式接口,当然首先是一个接口,然后就是在这个接口里面只能有一个抽象方法. 这种类型的接 ...
- MyBatis中关于大于,小于写法
第一种写法(1): 原符号 < <= > >= & ' " 替换符号 < <= > >= & ' " ...
- UE4网络模块解析(一)
一. UE4网络架构 Server-Client构架 1.一个服务器,一个或多个客户端. 客户端所有的操作如击杀等都需要传到中央服务器来运算,得到的运算结果下发到各个客户端.服务器是UE4多人游戏的重 ...
- 工时资源(Project)
<Project2016 企业项目管理实践>张会斌 董方好 编著 资源既然各种导入都会发生些不可描述的事,那就手工建立吧.但是问题又来了,资源还分种类的:工时资源.材料资源和成本资源. 好 ...
- java nio 写一个完整的http服务器 支持文件上传 chunk传输 gzip 压缩 使用过程 和servlet差不多
java nio 写一个完整的http服务器 支持文件上传 chunk传输 gzip 压缩 也仿照着 netty处理了NIO的空轮询BUG 本项目并不复杂 代码不多 ...
- Django记录操作日志、LogEntry的使用
LogEntry是在后台开发中经常用到的模块,它在admin是默认开启的. 可以使用LogEntry模块记录所有用户的操作记录.一方面可以用来监督,另一方面可以用来做回滚. 1. 使用LogEntry ...
- 将本地的react项目代码打包到服务器
打包过程 连接服务器 ssh root@xx.xx.xx.xx(服务器IP) 定位到当前项目目录 cd /path/projectName 更新代码到服务器 git pull 执行打包命令(这里我创建 ...