RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列
一、理论:
.net环境下,C#代码调用RabbitMQ消息队列,本文用easynetq开源的.net Rabbitmq api来实现。
EasyNetQ 是一个易于使用的RabbitMQ的.Net客户端API。
RabbitMQ 是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成,因此也是继承了这些优点。
AMQP 里主要要说两个组件:Exchange 和 Queue (在 AMQP 1.0 里还会有变动),
如下图所示,绿色的 X 就是 Exchange ,红色的是 Queue ,这两者都在 Server 端,又称作 Broker ,
这部分是 RabbitMQ 实现的,而蓝色的则是客户端,通常有 Producer 和 Consumer 两种类型:

二、asp.net项目搭建
1、新建项目(略)

2、项目nuget需要使用的三方dll,本文案例使用的版本如下图

3、消息队列类库结构说明

4、BusBuilder.cs管道创建类,主要负责链接Rabbitmq
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/// <summary>/// 消息服务器连接器/// </summary>public class BusBuilder{ public static IBus CreateMessageBus() { //消息服务器连接字符串 var connectionString = ConfigurationManager.ConnectionStrings["RabbitMQ"]; if (connectionString == null || connectionString.ConnectionString == string.Empty) { throw new Exception("messageserver connection string is missing or empty"); } return RabbitHutch.CreateBus(connectionString.ConnectionString); }} |
5、IProcessMessage类,定义了一个消息方法,用于消息传递
|
1
2
3
4
5
6
|
public interface IProcessMessage{ void ProcessMsg(Message msg); void Notice();} |
6、Message类,定义了消息传递的实体属性字段等信息
|
1
2
3
4
5
6
7
8
9
10
|
public class Message{ public string MessageID { get; set; } public string MessageTitle { get; set; } public string MessageBody { get; set; } public string MessageRouter { get; set; }} |
7、MQHelper类,负责创建消息管道、创建消息管道、发送消息体等工作
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
/// <summary>/// 发送消息/// </summary>public static void Publish(Message msg){ //// 创建消息bus IBus bus = BusBuilder.CreateMessageBus(); try { using (var publishChannel = bus.OpenPublishChannel()) //创建消息管道 { publishChannel.Publish(msg, x => x.WithTopic(msg.MessageRouter)); //通过管道发送消息 } } catch (EasyNetQException ex) { //处理连接消息服务器异常 } bus.Dispose();//与数据库connection类似,使用后记得销毁bus对象} |
8、web项目进行调用后台消息队列方法
|
1
2
3
4
5
6
|
RabbitMQ.Message msg = new RabbitMQ.Message();msg.MessageID = "test";msg.MessageBody = DateTime.Now.ToString();msg.MessageTitle = "test";msg.MessageRouter = "pcm.notice.zhangsan";RabbitMQ.MQHelper.Publish(msg); |
这样就可以用c#发送消息到队列中,测试结果如下图:

查看队列下的消息记录

获取队列消息尝试

至此,C#向Rabbitmq消息队列发送消息已经简单完成
RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列的更多相关文章
- RabbitMQ学习系列三:.net 环境下 C#代码订阅 RabbitMQ 消息并处理
上一篇已经讲了Rabbitmq如何在Windows平台安装 不懂请移步: RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列 一.理论 .net环境下,C#代码订阅 ...
- RabbitMQ学习系列二-C#代码发送消息
RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列 http://www.80iter.com/blog/1437455520862503 上一篇已经讲了Rabbi ...
- RabbitMQ学习系列一:windows下安装RabbitMQ服务
Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装Rabbit MQ的前提是安装Erlang. 第一步下载erlang:http://www.erlang.org/download ...
- RabbitMQ学习系列三-C#代码接收处理消息
RabbitMQ学习系列三:.net 环境下 C#代码订阅 RabbitMQ 消息并处理 http://www.80iter.com/blog/1438251320680361 http://www. ...
- RabbitMQ学习系列(三): C# 如何使用 RabbitMQ
上一篇已经讲了Rabbitmq如何在Windows平台安装,还不了解如何安装的朋友,请看我前面几篇文章:RabbitMQ学习系列一:windows下安装RabbitMQ服务 , 今天就来聊聊 C# 实 ...
- RabbitMQ学习系列一安装RabbitMQ服务
RabbitMQ学习系列一:windows下安装RabbitMQ服务 http://www.80iter.com/blog/1437026462550244 Rabbit MQ 是建立在强大的Erla ...
- Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群
Redis总结(五)缓存雪崩和缓存穿透等问题 前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...
- Nginx学习系列二Linux下Nginx实现负载均衡
关于在本地虚拟机(VMware 14)下安装Linux同时安装Nginx,请参考Nginx学习系列之搭建环境 1.启动Nginx 在Nginx安装成功的前提下,启动Nginx 已root模式登陆(权限 ...
- scrapy爬虫学习系列二:scrapy简单爬虫样例学习
系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备: http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...
随机推荐
- await和async在C#一般处理程序(ashx)中的使用
public class hello : HttpTaskAsyncHandler, IReadOnlySessionState { public IFetchServise fetch { get; ...
- 为什么主流的 App 看起来都差不多?这可能是件好事
欢迎访问网易云社区,了解更多网易技术产品运营经验. 现在设计师可以把精力都花在真正有意义的地方了. 打开Instagram.Airbnb.Apple Music.Twitter.Dropbox或Lyf ...
- Ubuntu18.04 - 实现鼠标右键新建文件功能!
Ubuntu18.04安装完毕后,你会发现,如果在桌面或其它地方,像在Windows下鼠标右键,新建一个文件,那么真的不行,没有那个选项!这个功能其实非常有用,怎么实现呢?新建一个你要右键新建类型文件 ...
- 基本数据类型补充 set集合 深浅拷贝
一.基本数据类型补充 1,关于int和str在之前的学习中已经介绍了80%以上了,现在再补充一个字符串的基本操作: li = ['李嘉诚','何炅','海峰','刘嘉玲'] s = "_&q ...
- 【2019北京集训2】duck 线段树优化建图+tarjan
题目大意:给你$n$个点,第$i$个点有点权$v_i$.你需要将这$n$个点排成一排,第$i$个点的点权能被累加当且仅当这个点前面存在编号在$[l_i,r_i]$中的点,问你这些点应该如何排列,点权和 ...
- mac操作记录
1.mac'主目录地址' 类似我的电脑 点桌面空白处按shift+command+C, 双击Macintosh HD图标后就能看见system文件夹 2.做excel表格,下载Microsoft Of ...
- odoo开发 相关知识点
(1)导入模块可以起别名: (2) 新的模型前端要调用显示有关联的另一个模型的相关字段 (3) 传递上下文 搜索视图打开默认按照接收的参数搜索显示: 发起端视图 上下文写法: 目标端 触发显示,搜索视 ...
- MetaMask安装使用指南
1.MetaMask(轻钱包) MetaMask是一款在谷歌浏览器Chrome上使用的插件类型的以太坊钱包,该钱包不需要下载,只需要在谷歌浏览器或基于谷歌浏览器内核的其它浏览器(如:360极速浏览器- ...
- web工程迁移---jboss5迁移到jboss6
这几天在做web工程的迁移,从jboss 5迁移到jboss 6.3. 在做迁移的过程中遇到了一些问题,在这里记录一下. 首先来看一下jboss5和jboss6.3的区别: 上面两幅 ...
- Mybatis 事务管理和缓存机制
一级缓存--SqlSession级别 数据库表tb_user User package com.example.demo.domain; public class User { private Int ...