Asp.net MVC使用EasyNetQ操作RabbitMQ
Demo下载地址:https://download.csdn.net/download/u010312811/11259742
.Net下操作RabbitMQ最常用的SDK是RabbitMQ.Client和EasyNetQ,EasyNetQ操作简单,更容易上手。
相关文章很多,但是大都是翻译自官方的Demo,一堆的控制台程序做消息【发布/订阅】显然不是我们在生产环境所期望的,所以本文以Asp.net MVC为例,介绍如何使用EasynetQ。
1.创建Asp.net MVC项目

项目结构如上图所示,Services文件夹包含了消息队列操作的相关接口,Models文件夹包含了测试需要用到的模型。
2.添加依赖
本文用到的组件包含:EasyNetQ、Autofac、NlLog。
添加依赖:
- Autofac、Autofac.Mvc5
- EasyNetQ
- NLog
其他的依赖如:RabbitMQ.Client、Newtonsoft.Json会自动添加,不需要单独手动添加。
3.消息队列接口

3.1 IMQService
public interface IMQService
{
void InitMQ(); void PublishMessage<T>(T message) where T : class; void SubscribeMessage(); }
该接口中我们添加了三个接口:
- InitMQ:初始化消息队列
- PublishMessage:消息发布
- SubscribeMessage:消息订阅
3.2 RabbitMQService
public class RabbitMQService:IMQService
{
IBus bus; public RabbitMQService()
{ }
public void InitMQ()
{
bus = RabbitHutch.CreateBus("host=localhost", x => x.Register<IConsumerErrorStrategy>(_ => new AlwaysRequeueErrorStrategy())); //订阅消息
SubscribeMessage();
} public void PublishMessage<T>(T message)
where T:class
{
bus.Publish<T>(message);
} public void SubscribeMessage()
{
bus.SubscribeAsync<Question>("subscribe_question", x => HandleMessageAsync(x).Invoke());
} private Func<int,Task> HandleMessageAsync(Question question)
{
return async (id) =>
{
if (new Random().Next(, ) == )
{
Console.WriteLine("Exception Happened!!!!");
NLogHelper.Info("Exception Happened!!!!" + " " + question.Text);
throw new Exception("Error Hanppened!" + " " + question.Text);
}
else
{
NLogHelper.Info("BEGIN");
Thread.Sleep();
Console.WriteLine(string.Format("worker:{0},content:{1}", id, question.Text));
NLogHelper.Info(string.Format("worker:{0},content:{1}", id, question.Text));
}
};
}
}
RabbitMQService是对消息队列接口的实现,包含了队列的初始化、发布、订阅。
初始化方法仅需要在程序启动时注册一次
SubscribeMessage方法用于指明消息队列的订阅方法。本例中指明了对类型为 Question 的消息使用方法 HandleMessageAsync 处理。
4.测试

参考
https://github.com/EasyNetQ/EasyNetQ/issues/734
https://github.com/EasyNetQ/EasyNetQ/issues/504
https://blog.csdn.net/chenludaniel/article/details/86138288
Asp.net MVC使用EasyNetQ操作RabbitMQ的更多相关文章
- EasyNetQ操作RabbitMQ(高级消息队列)
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件).写消息队列的时候用RabbitMQ比较好,但是写的时候需要自己封装下,自己的封装,就需要对RabbitM ...
- asp.net mvc access数据库操作
连接access数据库其实也简单,只要按照mvc的模式来就可以,遵循c v约定就可以 既然渲染试图是强类型,那么取得的数据就转换成强类型,其他一切和asp.net操作一样 DB mydb = new ...
- asp.net mvc webconfig配置文件操作
读取web.config数据,可以不用编译.如发布后,非常有用web.config文件<configuration> <appSettings> <add key=&qu ...
- asp.net mvc ViewBag常用操作
1.视图获取json类型数据 var str = '@(ViewBag.loginInfoList)'; if ($.trim(str).length>0) { re = new RegExp( ...
- ASP.NET MVC 5 02 - ASP.NET MVC 1-5 各版本特点
参考书籍:<ASP.NET MVC 4 高级编程>.<ASP.NET MVC 5 高级编程>.<C#高级编程(第8版)>.<使用ASP.NET MVC开发企业 ...
- ASP.NET MVC 3 之表单和 HTML 辅助方法(摘抄)
——选自<ASP.NET MVC3 高级编程(第5章) 孙远帅 译> 第5章 表单和HTML辅助方法 本章内容简介: * 理解表单 * 如何利用HTML辅助方法 * 编辑和输入的辅助方法 ...
- ASP.NET MVC快速开发框架FastExecutor开发全过程感受及总结
困境 追溯到2018年5月份,是个炎热的夏天,毕业后1年7个月我提出了离职,原因是受不了原来公司过度的封装框架感觉一年多毫无进步与实施天天轰炸般的电话,偶然间出去面试了一次发现自己知识真的是比较局限, ...
- 简述C#中IO的应用 RabbitMQ安装笔记 一次线上问题引发的对于C#中相等判断的思考 ef和mysql使用(一) ASP.NET/MVC/Core的HTTP请求流程
简述C#中IO的应用 在.NET Framework 中. System.IO 命名空间主要包含基于文件(和基于内存)的输入输出(I/O)服务的相关基础类库.和其他命名空间一样. System.I ...
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
随机推荐
- JUC源码分析-线程池篇(三)ScheduledThreadPoolExecutor
JUC源码分析-线程池篇(三)ScheduledThreadPoolExecutor ScheduledThreadPoolExecutor 继承自 ThreadPoolExecutor.它主要用来在 ...
- Mybatis Generator 安装(idea+maven)
1.在Intellij IDEA创建maven项目(本过程比较简单,略) 2. 在maven项目的pom.xml 添加mybatis-generator-maven-plugin 插件 <bui ...
- htons(), ntohl(), ntohs(),htons()这4个函数(摘)
在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题.这是就可能用到htons(), ntohl(), ntohs(),htons()这4个函数.网络字节顺序与本地字节顺序之间的转换 ...
- Asp.net Core + Log4net + ELK 搭建日志中心
原文:Asp.net Core + Log4net + ELK 搭建日志中心 Docker中一键安装ELK 对于这种工具类的东西,第一步就直接到docker的hub中查找了,很幸运,不仅有Elasti ...
- C语言之文件包含
c = #include <stdio.h> #include "A.h" int main() { /******************************** ...
- Flask理论基础(一)加载配置文件
一.修改/新增配置项 1.使用配置文件 app.config.from_pyfile("config.cfg") 如上 config.cfg 可以是任意后缀的文本文件,需要与app ...
- 读书笔记二、ndarray的数据类型
dtype(数据类型)是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息: import numpy as np arr1=np.array([1,2,3],dtype=np ...
- mysqld_safe A mysqld process already exists
最近修改mysql密码遇到mysqld_safe A mysqld process already exists问题: 解决步骤: 1:ps aux |grep mysql 查看mysql的进程. ...
- Flume详解
Flume是一种分布式,可靠且可用的服务,用于有效地收集,聚合和移动大量日志数据.它具有基于流数据流的简单灵活的架构.它具有可靠的可靠性机制和许多故障转移和恢复机制,具有强大的容错性.它使用简单的可扩 ...
- NX二次开发-获取矩阵值UF_CSYS_ask_matrix_values
NX9+VS2012 #include <uf.h> #include <uf_csys.h> UF_initialize(); //获取WCS标识 tag_t WcsId = ...