zoukankan      html  css  js  c++  java
  • 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.netframeworkv2.0.50727installUtil.exe D:DebugWindowsService1.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、服务项目结构

    img_name1

    3、结构简要说明

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

    img_name2

    BusBuilder.cs 消息服务器连接器

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

    ServiceMain.cs 消息服务执行类

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

    img_name3

    Program.cs 程序启动类

    img_name4

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

    img_name5

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

    img_name6

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

    img_name7

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

    4、c#处理代码

    img_name8

    如果队列有其他的pcm.notice.xxxxx消息,同样会被c#服务获取到,都是基于pcm.notice.#这样的#完全匹配原则。

    这样基本简单的c#订阅Rabbitmq消息,获取信息就完成了。

    问题整理:

    如果C#读取的Rabbitmq中message消息实体和你c#程序中的不一样,会报错如下:

    EasyNetQ.EasyNetQInvalidMessageTypeExcepion:Message type is incorrect.Expected 'RabbitMQ_Message:RabbitMQ',but was ''

    img_name9

    img_name10

  • 相关阅读:
    各版本mysql乱码的问题解决
    Centos+apache2.4.2+mysql5.5+php5.3.10+memcache+sphinx配置全程
    Mysql 优化
    Mysql 表优化
    Mysql 索引优化
    python整合连续数字的练习,包含itertoolsgroupby用法
    MySQL INTO OUTFILE/INFILE导出导入数据
    python lambda使用if
    mysql小知识
    Python利用urllib2抓取网页返回乱码的问题
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/9857710.html
Copyright © 2011-2022 走看看