之前有写到一篇介绍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的更多相关文章

  1. .net core集成使用consul

    快速启动一个consul集群可以参考:使用docker快速部署一个consul集群 .net core集成使用consul是通过consul提供出来api接口来实现的,可以分成两个部分来说明:配置集成 ...

  2. ABP官方文档翻译 6.2.1 ASP.NET Core集成

    ASP.NET Core 介绍 迁移到ASP.NET Core? 启动模板 配置 启动类 模块配置 控制器 应用服务作为控制器 过滤器 授权过滤器 审计Action过滤器 校验过滤器 工作单元Acti ...

  3. 使用EasyNetQ组件操作RabbitMQ消息队列服务

    RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现,是实现消息队列应用的一个中间件,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合, ...

  4. asp.net core 集成 log4net 日志框架

    asp.net core 集成 log4net 日志框架 Intro 在 asp.net core 中有些日志我们可能想输出到数据库或文件或elasticsearch等,如果不自己去实现一个 Logg ...

  5. [Abp 源码分析]十七、ASP.NET Core 集成

    0. 简介 整个 Abp 框架最为核心的除了 Abp 库之外,其次就是 Abp.AspNetCore 库了.虽然 Abp 本身是可以用于控制台程序的,不过那样的话 Abp 就基本没什么用,还是需要集合 ...

  6. Net Core集成Exceptionless分布式日志功能以及全局异常过滤

    Net Core集成Exceptionless分布式日志功能以及全局异常过滤 相信很多朋友都看过我的上篇关于Exceptionless的简单入门教程[asp.Net Core免费开源分布式异常日志收集 ...

  7. Asp.Net Core 集成 Hangfire 配置使用 Redis 存储

    Hangfire 官方支持 MSSQL 与 Redis(Hangfire.Pro.Redis) 两种 ,由于我的数据库是 MYSQL ,粗略查询了一下文档,现在对 .NET Core 支持的并不够好, ...

  8. asp.net core集成MongoDB

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.前言及MongoDB的介绍 最近在整合自己的框架,顺便把MongoDBD的最简单CRUD重构一下作为组件化集成到asp.net ...

  9. asp.net core集成CAP(分布式事务总线)

    一.前言 感谢杨晓东大佬为社区贡献的CAP开源项目,传送门在此:.NET Core 事件总线,分布式事务解决方案:CAP 以及 如何在你的项目中集成 CAP[手把手视频教程],之前也在工作中遇到分布式 ...

随机推荐

  1. UIButton总结

    UIButton 1. 功能 既能显示文字,又能显示图片(能显示2张图片,背景图片.内容图片) 长按高亮的时候可以切换图片\文字 直接通过addTarget...方法监听点击 2. 状态 normal ...

  2. 【编程思想】【设计模式】【行为模式Behavioral】chaining_method

    Python版 https://github.com/faif/python-patterns/blob/master/behavioral/chaining_method.py #!/usr/bin ...

  3. 【编程思想】【设计模式】【结构模式Structural】适配器模式adapter

    Python版 https://github.com/faif/python-patterns/blob/master/structural/adapter.py #!/usr/bin/env pyt ...

  4. 编译安装nginx 1.16

    准备源码包,并解压,创建nginx用户 [root@slave-master ~]# tar xf nginx-1.16.0.tar.gz [root@slave-master ~]# useradd ...

  5. canal安装与使用

    安装 alpha的版本不是稳定的版本 wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deploye ...

  6. 学习Oracle遇到的实际问题(持续更新)

    有三个用户参与这个事情: system用户,拥有表manager. sys create了一个用户item,并赋予权限: SQL> GRANT SELECT ON SYSTEM.MANAGER ...

  7. Druid数据库连接池工具类

    package cn.itcast.utils;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSo ...

  8. 🏆【Alibaba中间件技术系列】「RocketMQ技术专题」Broker配置介绍及发送流程、异常(XX Busy)问题分析

    参考资料 Rocketmq官网:http://rocketmq.apache.org/ Rocketmq的其它项目:https://github.com/apache/rocketmq-externa ...

  9. Redis cluster 集群部署和配置

    目录 一.集群简介 cluster介绍 cluster原理 cluster特点 应用场景 二.集群部署 环境介绍 节点部署 启动集群 三.集群测试 一.集群简介 cluster介绍 redis clu ...

  10. CPU的中断

    目录 一.简介 二.具体 方式 硬中断 软中断 中断切换 网卡中断 三.中断查看 一.简介 中断其实就是由硬件或软件所发送的一种称为IRQ(中断请求)的信号.中断允许让设备,如键盘,串口卡,并口等设备 ...