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快速入门之安全策 ...
随机推荐
- Comet OJ - Contest #4 B题 奇偶性
题目链接:https://www.cometoj.com/contest/39/problem/B?problem_id=1577 题意:给你一个数列,求L 到 R 区间内 所有数列 (ƒn mod ...
- 这是<一起找打的约定>的改良版本
-- CREATE TABLE class ( -- cid INT(25)auto_increment PRIMARY KEY, -- caption VARCHAR(50) not NULL -- ...
- P3410 /// 最大流最小割
题目大意: https://www.luogu.org/problemnew/show/P3410 题解 https://www.cnblogs.com/2020pengxiyue/p/9463055 ...
- sanic连接mongo
方法一: #没有密码,就是没有用户和用户密码 settings={"MOTOR_URI":"mongodb://127.0.0.1:27017/zzy"} ap ...
- 74HC595点亮8个LED灯
一.原理介绍 595有两个寄存器,都是8位的,如下所示: 595是串入并出带有锁存功能移位寄存器,它的使用方法简单: - - 在正常使用时 /SCLR接高电平,/G接低电平. - - 从SER每输 ...
- UVA11427 Expect the Expected 概率dp+全概率公式
题目传送门 题意:小明每晚都玩游戏,每一盘赢的概率都是p,如果第一盘就赢了,那么就去睡觉,第二天继续玩:否则继续玩,玩到赢的比例大于p才去睡:如果一直玩了n盘还没完成,就再也不玩了:问他玩游戏天数的期 ...
- 解析Spring MVC上传文件
新建一个普通的maven工程 在pom.xml文件中引入相应的坐标 <?xml version="1.0" encoding="UTF-8"?> & ...
- 任意两点间的最短路问题(Floyd-Warshall算法)
/* 任意两点间的最短路问题(Floyd-Warshall算法) */ import java.util.Scanner; public class Main { //图的顶点数,总边数 static ...
- idea bug解决
1.编译时错误:软件包 javax.servlet.http 不存在import javax.servlet.http.HttpServletRequest 解决办法:把servlet-api.jar ...
- 杂项:CSS3
ylbtech-杂项:CSS3 1.返回顶部 1. CSS3是CSS(层叠样式表)技术的升级版本,于1999年开始制订,2001年5月23日W3C完成了CSS3的工作草案,主要包括盒子模型.列表模块. ...