.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[手把手视频教程],之前也在工作中遇到分布式 ...
随机推荐
- layui 弹窗中 分页展示table
1. 需求:点击查看更多,展示该类别 所有数据,并分页 2. 参考文档: (1)https://www.jianshu.com/p/40da11ebae66 (2) https://blog.csdn ...
- C#获取Windows10屏幕的缩放比例
现在1920x1080以上分辨率的高分屏电脑渐渐普及了.我们会在Windows的显示设置里看到缩放比例的设置.在Windows桌面客户端的开发中,有时会想要精确计算窗口的面积或位置.然而在默认情况下, ...
- 测试工具_webbench
目录 一.简介 二.例子 一.简介 Webbench是知名的网站压力测试工具,能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况. webbench的标准测试可以向我们展示服务器的 ...
- 如何基于 Docker 快速搭建 Springboot + Mysql + Redis 项目
目录 前言 项目目录 搭建项目 1. docker安装启动mysql以及redis 1.1 安装mysql 1.2 安装redis 2. 初始化数据库 3.创建项目 4.初始化代码 4.1 全局配置文 ...
- LuoguP7259 [COCI2009-2010#3] SORT 题解
Content 请编写一个"频率排序器".输入一个 长度为 \(n\) 的数列 \(A=\{a_1,a_2,\dots,a_n\}\),要求: 按照每个数的出现次数降序排列. 如果 ...
- java 常用类库:操作系统System类,运行时环境Runtime
System类: System 类代表Java程序的运行平台,程序不能创建System类的对象, System类提供了一些类变量和类方法,允许直接通过 System 类来调用这些类变量和类方法. Sy ...
- ACwing1216. 饮料换购
题目: 乐羊羊饮料厂正在举办一次促销优惠活动.乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去(但不允许暂借或赊账). 请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于 ...
- springboot整合阿里云视频点播接口
官方SDK文档地址: https://help.aliyun.com/document_detail/57756.html?spm=a2c4g.11186623.6.904.4e0d3bd9VbkIC ...
- 【机器学*】k-*邻算法(kNN) 学*笔记
[机器学*]k-*邻算法(kNN) 学*笔记 标签(空格分隔): 机器学* kNN简介 kNN算法是做分类问题的.思想如下: KNN算法的思想总结一下:就是在训练集中数据和标签已知的情况下,输入测试数 ...
- 【LeetCode】519. Random Flip Matrix 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/random-fl ...