RabbitMQ学习系列三-C#代码接收处理消息
RabbitMQ学习系列三:.net 环境下 C#代码订阅 RabbitMQ 消息并处理
http://www.80iter.com/blog/1438251320680361
http://www.80iter.com/blog/1414401059921214
上一篇已经讲了Rabbitmq如何在Windows平台安装
不懂请移步: RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列
一、理论
.net环境下,C#代码订阅RabbitMQ消息队列,本文用easynetq开源的.net Rabbitmq api来实现,EasyNetQ 是一个易于使用的RabbitMQ的.Net客户端API,本文win服务基于topshelf实现,不懂请移步:windowsSevice程序和topshelf程序创建服务对比
区别主要在于以下几点:
1、编写方式
一个是windowservice
一个是console控制台程序
2、安装方式
windowservice 需要自带的framework中的installutil
topshelf打包的控制台程序自己随意安装
3、部署
理论不通过其他手段一个windowservice部署文件夹包只能部署一个服务,想部署多套相同服务,需要拷贝多个相同文件夹进行多次安装
topshelf则可以多个服务指向一个文件夹
4、调试
windowservice调试,不解释多麻烦
console控制台程序调试简单方便
安装:%systemroot%\microsoft.net\framework\v2.0.50727\installUtil.exe D:\Debug\WindowsService1.exe
卸载:sc delete服务名
net start 服务名
net stop 服务名
sc start 服务名
sc stop 服务名
部署windows服务--制作安装包
1、建立一个新的windows服务项目Server1
2、打开Service1代码视图,找到OnStart部分,加入代码
3、切换到设计视图,右键-添加安装程序
4、切换到新生成的ProjectInstaller.cs设计视图,找到serviceProcessInstaller1对Account属性设置为LocalSystem,对serviceInstaller1的ServiceName属性设置为Server1(服务的名字),StartType属性设置为Automatic(系统启动的时候自动启动服务)
1、 Topshelf下载地址https://github.com/Topshelf/Topshelf/downloads
2、 官网http://topshelf-project.com/
3、 文档http://docs.topshelf-project.com/en/latest/
4、 install: ConsoleApplication1.exe install
5、 start: ConsoleApplication1.exe start ,执行后服务被启动
6、 stop: ConsoleApplication1.exe stop ,执行后服务被停止
7、 uninstall: ConsoleApplication1.exe uninstall,执行后服务被卸载
8、 很方便的安装卸载服务,同时我们本地调试也很简单,直接运行控制台即可
9、 下面我们再尝试一个方法,使用同一个ConsoleApplication1.exe创建若干个服务
10、 参数-instance执行安装 ConsoleApplication1.exe -instance " test1" install
11、同理再创建一个实例 ConsoleApplication1.exe -instance " test2" install
你会发现你的系统服务里增加了两个相同服务的不同实例 ,若要卸载直接将安装时的命令install 换位uninstall即可卸载
二、项目搭建
1、此处省略topshelf服务搭建步骤
2、服务项目结构

3、结构简要说明
NoticeProcess.cs 获取消息体后处理类

BusBuilder.cs 消息服务器连接器
Installer.cs 消息服务安装实现类
ServiceMain.cs 消息服务执行类
VaultService.cs C#订阅消息服务后的处理类,进行routingkey的约束等

Program.cs 程序启动类

三、测试发布和订阅
1、发布消息(此处省略,具体实现参照第二篇文章)

2、C#订阅服务启动测试
3、C#服务调试获取消息

可以看到这里启动后,获取到了1步骤当中的消息routingkey
4、c#处理代码

如果队列有其他的pcm.notice.xxxxx消息,同样会被c#服务获取到,都是基于pcm.notice.#这样的#完全匹配原则。
这样基本简单的c#订阅Rabbitmq消息,获取信息就完成了。
问题整理:
如果C#读取的Rabbitmq中message消息实体和你c#程序中的不一样,会报错如下:
EasyNetQ.EasyNetQInvalidMessageTypeExcepion:Message type is incorrect.Expected 'RabbitMQ_Message:RabbitMQ',but was ''


RabbitMQ学习系列三-C#代码接收处理消息的更多相关文章
- 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学习系列(三): C# 如何使用 RabbitMQ
上一篇已经讲了Rabbitmq如何在Windows平台安装,还不了解如何安装的朋友,请看我前面几篇文章:RabbitMQ学习系列一:windows下安装RabbitMQ服务 , 今天就来聊聊 C# 实 ...
- Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群
Redis总结(五)缓存雪崩和缓存穿透等问题 前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...
- .net reactor 学习系列(三)---.net reactor代码自动操作相关保护功能
原文:.net reactor 学习系列(三)---.net reactor代码自动操作相关保护功能 接上篇,上篇已经学习了界面的各种功能以及各种配置,这篇准备学习下代码控制许可证. ...
- RabbitMQ学习系列(四): 几种Exchange 模式
上一篇,讲了RabbitMQ的具体用法,可以看看这篇文章:RabbitMQ学习系列(三): C# 如何使用 RabbitMQ.今天说些理论的东西,Exchange 的几种模式. AMQP协议中的核心思 ...
- MyBatis学习系列三——结合Spring
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring MyBatis在项目中应用一般都要结合Spring,这一章主要把MyBat ...
- scrapy爬虫学习系列三:scrapy部署到scrapyhub上
系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备: http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...
- DocX开源WORD操作组件的学习系列三
DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...
随机推荐
- sqlservr.exe占用大量内存
SQL Server是如何使用内存 最大的开销一般是用于数据缓存,如果内存足够,它会把用过的数据和觉得你会用到的数据统统扔到内存中,直到内存不足的时候,才把命中率低的数据给清掉.所以一般我们在看sta ...
- CAS单点登录的配置
先说单点登录是个啥? 单点登录主要用于多系统集成,即在多个系统中,用户只需要到一个中央服务器登录一次即可访问这些系统中的任何一个,无须多次登录. 配置的步骤如下: 1.生成安全证书 Cas serve ...
- FTP pure-ftpd 安装、管理
FTP简介 FTP是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为文传协议,用户Internet上的控制文件的双向传输. FTP的主要作用,就是让用户链接上一个远 ...
- ASP.NET MVC 4.0 中使用NPOI 2.2.0 按模板生成Excel报表
使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/ ...
- c语言的按位运算符
& 按位与 | 按位或 ^ 按位异或 1. 按位与运算 按位与运算符"&"是双目运算符.其功能是参与运算的两数各对应的二进位相与.只有对应的两个二进位均为1时,结果 ...
- jQ&js给label
<strong>当前角色:</strong><label id="lblRoleName" style="margin-bottom: 0p ...
- 介绍几个C#正则表达式工具
这里将为大家推荐介绍几个C#正则表达式工具,这些小工具能帮助大家在.NET开发过程中起到事半功倍的效果,希望大家喜欢. 推荐三个C#正则表达式工具,理由如下 第一个C#正则表达式工具,REGEX 这个 ...
- MapReduce job在JobTracker初始化源码级分析
mapreduce job提交流程源码级分析(三)中已经说明用户最终调用JobTracker.submitJob方法来向JobTracker提交作业.而这个方法的核心提交方法是JobTracker.a ...
- BZOJ 1835 [ZJOI2010]base 基站选址:线段树优化dp
传送门 题意 有 $ n $ 个村庄在一排直线上,现在要建造不超过 $ K $ 个通讯基站,基站只能造在村庄处. 第 $ i $ 个村庄距离第 $ 1 $ 个村庄的距离为 $ D_i $ .在此建造基 ...
- python下的复杂网络编程包networkx的使用(摘抄)
原文:http://blog.sciencenet.cn/home.php?mod=space&uid=404069&do=blog&classid=141080&vi ...