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的更多相关文章

  1. EasyNetQ操作RabbitMQ(高级消息队列)

    RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件).写消息队列的时候用RabbitMQ比较好,但是写的时候需要自己封装下,自己的封装,就需要对RabbitM ...

  2. asp.net mvc access数据库操作

    连接access数据库其实也简单,只要按照mvc的模式来就可以,遵循c v约定就可以 既然渲染试图是强类型,那么取得的数据就转换成强类型,其他一切和asp.net操作一样 DB mydb = new ...

  3. asp.net mvc webconfig配置文件操作

    读取web.config数据,可以不用编译.如发布后,非常有用web.config文件<configuration> <appSettings> <add key=&qu ...

  4. asp.net mvc ViewBag常用操作

    1.视图获取json类型数据 var str = '@(ViewBag.loginInfoList)'; if ($.trim(str).length>0) { re = new RegExp( ...

  5. ASP.NET MVC 5 02 - ASP.NET MVC 1-5 各版本特点

    参考书籍:<ASP.NET MVC 4 高级编程>.<ASP.NET MVC 5 高级编程>.<C#高级编程(第8版)>.<使用ASP.NET MVC开发企业 ...

  6. ASP.NET MVC 3 之表单和 HTML 辅助方法(摘抄)

    ——选自<ASP.NET MVC3 高级编程(第5章) 孙远帅 译> 第5章 表单和HTML辅助方法 本章内容简介: * 理解表单 * 如何利用HTML辅助方法 * 编辑和输入的辅助方法 ...

  7. ASP.NET MVC快速开发框架FastExecutor开发全过程感受及总结

    困境 追溯到2018年5月份,是个炎热的夏天,毕业后1年7个月我提出了离职,原因是受不了原来公司过度的封装框架感觉一年多毫无进步与实施天天轰炸般的电话,偶然间出去面试了一次发现自己知识真的是比较局限, ...

  8. 简述C#中IO的应用 RabbitMQ安装笔记 一次线上问题引发的对于C#中相等判断的思考 ef和mysql使用(一) ASP.NET/MVC/Core的HTTP请求流程

    简述C#中IO的应用   在.NET Framework 中. System.IO 命名空间主要包含基于文件(和基于内存)的输入输出(I/O)服务的相关基础类库.和其他命名空间一样. System.I ...

  9. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

随机推荐

  1. Apache Flink 整体介绍

    前言 Flink 是一种流式计算框架,为什么我会接触到 Flink 呢?因为我目前在负责的是监控平台的告警部分,负责采集到的监控数据会直接往 kafka 里塞,然后告警这边需要从 kafka topi ...

  2. 牛客OI月赛12-提高组题解

    牛客OI月赛12-提高组 当天晚上被\(loli\)要求去打了某高端oj部分原创的模拟赛,第二天看了牛客的题觉得非常清真,于是就去写了 不难发现现场写出\(260\text{pts}\)并不需要动脑子 ...

  3. el-scrollbar 如何去掉横线滚动条?

    1. el-scrollbar style="height:100%" 2. 不要在scoped私有变量添加 .el-scrollbar__wrap{ overflow-x: hi ...

  4. 原型对象(JS中的父类)

    原型 prototype 我们所创建的每一个函数,解析器都会向函数中添加 一个属性prototype ,这个属性对应的对象就是我们所谓的原型对象  判断函数中是否含有prototype属性,有则返回 ...

  5. Ubuntu 更新国内镜像源失败

    Ubuntu 更新国内镜像源失败 首先打开系统原来的/etc/apt/sources.list 查看,原来的仓库地址是 https 还是 http 如果是http那么说明本机的 CA 证书有问题,运行 ...

  6. 干货满满!10分钟看懂Docker和K8S

    2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司. 这家公司主要提供基于PaaS的云计算技术服务.具体来说,是和LXC有关的容器技术. LXC,就是Linux容器虚 ...

  7. vue v-for 组件传值 enter传值

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. JRebel安装部署,激活

    1.安装部署 2.激活 去官网获得激活码,首先进行注册,之后获得激活码 官网:https://jrebel.com/software/jrebel/trial/getkey/ 查看是否激活

  9. 解析Spring MVC上传文件

    新建一个普通的maven工程 在pom.xml文件中引入相应的坐标 <?xml version="1.0" encoding="UTF-8"?> & ...

  10. ArrayList集合二

    集合的遍历 通过集合遍历,得到集合中每个元素,这是集合中最常见的操作.集合的遍历与数组的遍历很像,都是通过索引的方式,集合遍历方式如下 13 import java.util.ArrayList; 1 ...