RabbitMQ学习系列三-C#代码接收处理消息

时间:2022-11-12 19:34:30

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、服务项目结构

RabbitMQ学习系列三-C#代码接收处理消息

3、结构简要说明

NoticeProcess.cs 获取消息体后处理类

RabbitMQ学习系列三-C#代码接收处理消息

BusBuilder.cs 消息服务器连接器

Installer.cs 消息服务安装实现类

ServiceMain.cs 消息服务执行类

VaultService.cs C#订阅消息服务后的处理类,进行routingkey的约束等

RabbitMQ学习系列三-C#代码接收处理消息

Program.cs 程序启动类

RabbitMQ学习系列三-C#代码接收处理消息

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

RabbitMQ学习系列三-C#代码接收处理消息

2、C#订阅服务启动测试

3、C#服务调试获取消息

RabbitMQ学习系列三-C#代码接收处理消息

可以看到这里启动后,获取到了1步骤当中的消息routingkey

4、c#处理代码

RabbitMQ学习系列三-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学习系列三-C#代码接收处理消息

RabbitMQ学习系列三-C#代码接收处理消息的更多相关文章

  1. RabbitMQ学习系列三:.net 环境下 C#代码订阅 RabbitMQ 消息并处理

    上一篇已经讲了Rabbitmq如何在Windows平台安装 不懂请移步: RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列 一.理论 .net环境下,C#代码订阅 ...

  2. RabbitMQ学习系列二-C#代码发送消息

    RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列 http://www.80iter.com/blog/1437455520862503 上一篇已经讲了Rabbi ...

  3. RabbitMQ学习系列(三): C# 如何使用 RabbitMQ

    上一篇已经讲了Rabbitmq如何在Windows平台安装,还不了解如何安装的朋友,请看我前面几篇文章:RabbitMQ学习系列一:windows下安装RabbitMQ服务 , 今天就来聊聊 C# 实 ...

  4. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

  5. .net reactor 学习系列(三)---.net reactor代码自动操作相关保护功能

    原文:.net reactor 学习系列(三)---.net reactor代码自动操作相关保护功能         接上篇,上篇已经学习了界面的各种功能以及各种配置,这篇准备学习下代码控制许可证. ...

  6. RabbitMQ学习系列(四): 几种Exchange 模式

    上一篇,讲了RabbitMQ的具体用法,可以看看这篇文章:RabbitMQ学习系列(三): C# 如何使用 RabbitMQ.今天说些理论的东西,Exchange 的几种模式. AMQP协议中的核心思 ...

  7. MyBatis学习系列三——结合Spring

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring MyBatis在项目中应用一般都要结合Spring,这一章主要把MyBat ...

  8. scrapy爬虫学习系列三:scrapy部署到scrapyhub上

    系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备:      http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...

  9. DocX开源WORD操作组件的学习系列三

    DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...

随机推荐

  1. featherview模板引擎

    1.判断语法 <?php if(isset($value['fromVR']) && !empty($value['fromVR'])) {?> <s class=& ...

  2. WordPress无法连接MySQL数据库

    安装WordPress,需要配置MySQL数据库.配置好用户名和密码后居然还是报错. 通过抓包软件,发现根本没有数据包发往3306端口. 只能google之,发现是因为selinux的原因 解决方案: ...

  3. Golang 入门系列(三)Go语言基础知识汇总

    前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...

  4. 枚举应用demo

    package com.xx; public enum PositionEM{ ONE(1,"领导"), TWO(2,"员工"); private Long v ...

  5. Linux 内核开发 - 内核定时器

    时间差的度量 系统的定时器硬件以固定的频率产生时钟中断,产生始终中断的间隔以HZ 常量来决定,通常在50~1200之间,x86默认是1000.HZ能够依据不同的内核来配置. Linux 採用jiffi ...

  6. &lbrack;Ubuntu&rsqb; 解决 pip 安装 lxml 出现 x86&lowbar;64-linux-gnu-gcc 异常

    安装 pip : $ wget https://bootstrap.pypa.io/get-pip.py ... $ sudo python get-pip.py install 使用 pip 安装/ ...

  7. &OpenCurlyDoubleQuote;拒绝了对对象数据库的 EXECUTE 权限”之解决

    “拒绝了对对象'aspnet_CheckSchemaVersion'的 EXECUTE 权限”之解决 [错误状态] “/XXX”应用程序中的服务器错误. ----------------------- ...

  8. Linux下onvi支持h265环境的的搭建:gsoap的安装及生产&period;c &period;h文件

     1. 下载gsoap  :http://www.genivia.com/products.html#notice,既Open Source gSOAP版本,并解压进入目录安装,configure后面 ...

  9. 在CentOS7命令行模式下安装虚拟机

    转载:https://blog.csdn.net/sunnyfg/article/details/51493602 1.主机环境描述: 操作系统:CentOS7 系统GUI:无 CPU:Intel4代 ...

  10. Django--form保存用户输入内容

    需求 用户提交form时,如果报错,页面中的用户信息还在(除了密码),没有被刷新掉,不用用户再次输入. 速查 views.py 1 2 3 def login(request):     obj = ...