RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列
上一篇已经讲了Rabbitmq如何在Windows平台安装,不懂请移步:RabbitMQ学习系列一:windows下安装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消息队列发送消息已经简单完成
下一篇:C#订阅消息、获取消息的方式,敬请期待。。。
附件: RabbitMQ.rar 下载 (下载需要:0 个80币)
转载于:https://www.cnblogs.com/zxtceq/p/7891470.html
RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列相关推荐
- 【深度学习】Mac + pycharm环境下 MASK-Rcnn 代码实现过程中的问题
自从用了mac,每天都在踩坑!纪念一下 mask代码地址:https://github.com/matterport/Mask_RCNN pythonapi地址:https://github.com/ ...
- Nginx学习系列二Linux下Nginx实现负载均衡
关于在本地虚拟机(VMware 14)下安装Linux同时安装Nginx,请参考Nginx学习系列之搭建环境 1.启动Nginx 在Nginx安装成功的前提下,启动Nginx 已root模式登陆(权限 ...
- 图机器学习(GML)图神经网络(GNN)原理和代码实现(前置学习系列二)
图机器学习(GML)&图神经网络(GNN)原理和代码实现(PGL)[前置学习系列二] 上一个项目对图相关基础知识进行了详细讲述,下面进图GML networkx :NetworkX 是一个 P ...
- Linux学习系列二:Linux中的常用命令
这个系列的Linux教程主要参考刘遄老师的<Linux就该这么学>.用的系统是RHEL8,如果遇见一些命令出现问题,请首先检查自己的系统是否一致,如果不一致,可网上查一下系统间某些命令之间 ...
- Pyside2 学习系列二:PyInstaller打包项目exe (超详细的Pyside2 攻略)
继上一篇文章创建了项目后,本章我们进行项目的打包工作. 本项目的所有演示代码:github可在这里下载. 打包只用的工具为PyInstaller. 打包步骤 1 准备环境 1.1 安装`PyInsta ...
- A.图机器学习(GML)图神经网络(GNN)原理和代码实现(前置学习系列二)
图学习图神经网络算法专栏简介:主要实现图游走模型(DeepWalk.node2vec):图神经网络算法(GCN.GAT.GraphSage),部分进阶 GNN 模型(UniMP标签传播.ERNIESa ...
- Rasa 3.x 学习系列- 内网环境部署Docker及Rasa duckling、Redis
Rasa 3.x 学习系列- 内网环境部署Docker及Rasa duckling.Redis 在单位内网 centos 7.9 Linux 环境里面安装Docker及Rasa duckling.Re ...
- 计算机图形学——OpenGL学习系列之绘制3D下的小桌子
计算机图形学--OpenGL学习系列之绘制3D下的小桌子 做的一个小练习,主要用到了几何变换还有gl自带的一个绘制立方体的函数,顺便体会一下glPush和glPop的用法.另外,从2D到3D,开心到飞 ...
- Mysql学习篇之---Windows环境下安装 (修改密码)
Mysql学习篇之---Windows环境下安装 (修改密码) 前言: 自己瞎鼓捣本机上的Mysql,结果导致mysql密码用那个都登录不进去了. 解决方案: 首先把mysql重新删除掉,重新解压了一 ...
最新文章
- php中用foreach改变数组的值的问题
- Android Activity 以及 Application 生命周期
- 周长最短面积最大_圆内接三角形中,正三角形周长最大值的证明
- WingIDE 5的安装与破解方法
- centos MySQL 双机_CentOS利用Keepalived构建双主MySQL+双机热备
- Android开发之高仿百度地图底部滑出菜单
- windows10系统下MongoDB的安装及环境配置
- python人人语音爬虫(登陆尚未完成,需要使用先登录在查cookie中的t)
- 干的漂亮!一夜之间GPS在南海信号全无,美军只能干瞪眼
- java程序的运行方式
- curl安装使用【超级无敌简单】
- 本特利振动探头177230-01-01-CN
- html原生的日期选择器,原生JS实现日期选择
- Unity实现播放Ogg格式视频功能实现
- 微信小程序使用font awsome图标库(最新fontawsome5)
- 大型分布式网站架构如何设计
- C语言练习题:统计 N 个整数中,大于零或小于零的整数个数(数组)
- 手牵手系列之TypeScript开发环境搭建
- 孙溟㠭篆刻《天地宽》
- 2019 初入IT十年(下)---- 视线所及只剩生活
热门文章
- VirtualBox虚拟机网络连接设置的四种方式
- 分享一个C#使用AT指令控制语音猫的例子
- 关于Javascript的内存泄漏问题的整理稿
- 区块链4.0DexChain是什么?
- 区块链技术之以太坊ETH白皮书
- sql算术运算符_SQL运算符教程–按位,比较,算术和逻辑运算符查询示例
- c语言知道算法写不出代码,这个代码怎么写算法啊,求教,我真的不会写算法怎么办#incl...
- linux禁止路由器,FCC 新规可能禁止在 WiFi 路由器安装 OpenWRT
- 7软件质量与测试规范
- 登高自卑 | 我的PyTorch入门与实践笔记