RabbitMQ学习系列 : C# 如何使用 RabbitMQ

C#使用RabbitMQ.Client进行消息队列通信 VS2019中新建控制台应用程序RabbitMQDemo【.net framework 4.6.1】,右键项目RabbitMQDemo, 阅读详情


 上一篇已经讲了Rabbitmq如何在Windows平台安装,还不了解如何安装的朋友,请看我前面文章 , 今天就来聊聊 C# 实际开发的过程中,怎么调用 用RabbitMQ。


  一、客户端 

    RabbitMQ.Client 是rabbitmq 官方提供的的客户端,net 版本地址 :http://www.rabbitmq.com/dotnet.html 

    EasyNetQ 是基于RabbitMQ.Client 基础上封装的开源客户端。使用非常方便。地址:http://easynetq.com/ 。 本篇所使用示例代码下载地址:  demo示例下载 。

    RabbitMQ 还有很多其他客户端API,都非常的好用。我们在一边,一直用的都是 EasyNetQ,所以这里的 demo 只介绍 EasyNetQ 客户端实现。其他的客户端,大家自己去研究吧。

 

  二、项目结构

    

      说明:前面我们提到过,RabbitMQ由 Producer(生成者) 和 Consumer(消费者) 两部分组成。Weiz.Consumer 就是Consumer(消费者),Weiz. Producer 为 Producer(生成者),Weiz.MQ 为消息队列的通用处理类库。


  三、项目搭建

    1. Weiz.MQ 项目,消息队列的通用处理类库,用于正在的订阅和发布消息。

      1. 通过nuget安装项目EasyNetQ 相关组件, (略)

      2. 增加BusBuilder.cs管道创建类,主要负责链接Rabbitmq。

using System;
using System.Configuration;
using EasyNetQ;

namespace Weiz.MQ
{
    /// <summary>
    /// 消息服务器连接器
    /// </summary>
    public class BusBuilder
    {
        public static IBus CreateMessageBus()
        {
            // 消息服务器连接字符串
            // var connectionString = ConfigurationManager.ConnectionStrings["RabbitMQ"];
            string connString = "host=192.168.98.107:5672;virtualHost=OrderQueue;username=zhangweizhong;password=weizhong1988";
            if (connString == null || connString == string.Empty)
            {
                throw new Exception("messageserver connection string is missing or empty");
            }
            
            return RabbitHutch.CreateBus(connString);
        }
    }
}


      3. 增加IProcessMessage类,定义了一个消息方法,用于消息传递

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Weiz.MQ
{
    public interface IProcessMessage
    {
        void ProcessMsg(Message msg);
    }
}


      4. 增加Message类,定义了消息传递的实体属性字段等信息

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Weiz.MQ
{
    public class Message
    {
        public string MessageID { get; set; }
        
        public string MessageTitle { get; set; }

        public string MessageBody { get; set; }

        public string MessageRouter { get; set; }
    }
}


      5. 增加MQHelper类,用于正在的订阅和发布消息。

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

using EasyNetQ;

namespace Weiz.MQ
{
    public class MQHelper
    {
        /// <summary>
        /// 发送消息
        /// </summary>
        public static void Publish(Message msg)
        {
            //// 创建消息bus
            IBus bus = BusBuilder.CreateMessageBus();

            try
            {
                bus.Publish(msg, x => x.WithTopic(msg.MessageRouter));
            }
            catch (EasyNetQException ex)
            {
                //处理连接消息服务器异常 
            }

            bus.Dispose();//与数据库connection类似,使用后记得销毁bus对象
        }

        /// <summary>
        /// 接收消息
        /// </summary>
        /// <param name="msg"></param>
        public static void Subscribe(Message msg, IProcessMessage ipro)
        {
            //// 创建消息bus
            IBus bus = BusBuilder.CreateMessageBus();

            try
            {
                bus.Subscribe<Message>(msg.MessageRouter, message => ipro.ProcessMsg(message), x => x.WithTopic(msg.MessageRouter));

            }
            catch (EasyNetQException ex)
            {
                //处理连接消息服务器异常 
            }
        }
    }
}

 

    2. RabbitMQ由 Producer(生成者)

      1. 创建一个aspx 页面,增加如下代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Weiz.MQ;

namespace Weiz.Producer
{
    public partial class TestMQ : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Message msg = new Message();
            msg.MessageID = "1";
            msg.MessageBody = DateTime.Now.ToString();
            msg.MessageTitle = "1";
            msg.MessageRouter = "pcm.notice.zhangsan";
            MQHelper.Publish(msg);

        }
    }
}


    3. Weiz.Consumer 就是Consumer(消费者)

      1 . 新增OrderProcessMessage.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Weiz.Consumer
{
    public class OrderProcessMessage:MQ.IProcessMessage
    {
        public void ProcessMsg(MQ.Message msg)
        {
            Console.WriteLine(msg.MessageBody);
        }
    }
}


      2. Program 增加如下代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Weiz.Consumer
{
    class Program
    {
        static void Main(string[] args)
        {
            OrderProcessMessage order = new OrderProcessMessage();
            MQ.Message msg = new MQ.Message();
            msg.MessageID = "1";
            msg.MessageRouter = "pcm.notice.zhangsan";

            MQ.MQHelper.Subscribe(msg, order);
        }
    }
}


 

  四、运行

     1. 启动 Weiz.Consumer (消费者),启动消费者,会自动在RabbitMQ 服务器上创建相关的exchange 和 queue 。

      

 

 

      Consumer 消费者,使用的是Subscribe (订阅)的模式,所以,Weiz.Consumer客户端启动后,会自动创建connection,生成相关的exchange 和queue。

    2. 启动Weiz. Producer 里的TestMQ.aspx 页面,往队列里面写一条消息。订阅的消费者立马就能拿到这条消息。

       

 

 

  至此,C#向Rabbitmq消息队列发送消息已经简单完成。

C#使用RabbitMq Console.WriteLine(string.Format("接收时间:{0},消息内容:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), msgBody));//这段话也很好理解,假如Exchange(交换机)上绑定了三个Queue(队列),当这个三个Queue(队列)都被删除的时候这个Exchange(交换机)将会被自动删除。 阅读详情

相关推荐

C#多线程技术提高RabbitMQ消费吞吐率(二)

一、课程介绍本次分享课程属于《C#高级编程实战技能开发宝典课程系列》中的第二部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集、整理和完善此系列课程!本次高级系列课程适合人群如下:1、有一定的NET开发基础并对RabbitMQ技术有一定了解和认识。2、喜欢阿笨的干货分享课程的童鞋们。希望大家在选择阿笨的 C#高级编程实战技能开发宝典课程系列的时...

跟着阿笨一起玩NET 1096

【C#】RabbitMQ入门指南(一)

文章目录1.简介2. 相关概念2.1 消息中间件2.2 消息中间件的作用2.3 RabbitMQ中的一些概念2.4 RabbitMQ模型3. 点对点3.1 轮询消费3.2 手动发送ACK与数据持久存储4.发布订阅4.1 交换机(Exchange)4.2 `fanout`交换机4.3 路由(Routing)4.3.1 `Direct`交换机4.4 主题(Topics)4.4.1 `Topic`交换机4.4.2 最终实现5. 远程过程调用(RPC)6. 发布确认(Publisher Confirms)6.1 发

catshitone的专栏 1万+

C# 使用 RabbitMQ 的详细使用方法

RabbitMQ 是一个功能强大的消息队列系统,可用于在分布式系统中进行可靠的消息传递。本篇博客将详细介绍如何在 C# 中使用 RabbitMQ 实现各种消息队列操作,包括连接 RabbitMQ 服务器、创建通道、声明队列、发布消息以及消费消息等。RabbitMQ 是一个开源的消息代理软件,实现了 AMQP(Advanced Message Queuing Protocol)协议,提供了可靠的消息传递机制。

仰望星空的博客 5439

C# 最全面透彻的RabbitMQ指南

概念RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。RabbitMQ是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的一个 Advanced Message Queu...

zls365365的博客 3189

Python电影推荐系统实战:协同过滤与评估指标全解析

推荐系统是机器学习中最贴近日常应用的技术之一,它通过分析用户历史行为构建兴趣画像,进而预测可能喜欢的物品。在工程实现上,基于Python的数据处理栈与协同过滤算法构成最经典组合:UserCF通过相似用户评分预测偏好,ItemCF则利用物品间相似度进行推荐,两者都依赖评分矩阵的构建与相似度计算。评估环节常采用RMSE、MAE和TopN命中率,确保模型效果可量化。这类技术广泛应用于电商、视频和社交平台,而电影推荐系统因其数据开源、效果直观,成为入门首选实践项目。本文以MovieLens数据集为例,拆解从数据预处

weixin_34343000的博客 393

使用ChIPSeeker进行ChIP-seq, ATAC-seq,cut&tag等富集峰的基因组注释

常规的下一代高通量测序(next generation sequencing, NGS)实验通常产生大量短片段(reads),通常我们需要将这些reads比对到参考基因组/转录组上,即将它们置于生物学上有意义的基因背景下,才能获得有意义的结果。一般我们认为会产生两种类型的数据(当然两者并无严格意义上的区分)

微生信 3319

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

RabbitMQ学习系列(三): C# 如何使用 RabbitMQ   上一篇已经讲了Rabbitmq如何在Windows平台安装,还不了解如何安装的朋友,请看我前面几篇文章:RabbitMQ学习系列一:windows下安装RabbitMQ服务 , 今天就来聊聊 C# 实际开发的过程中,怎么调用 用RabbitMQ。   一、客户端      ...

章为忠的专栏 295

Win11安装Office2021

windows11安装office2021。

1万+

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

上一篇已经讲了Rabbitmq如何在Windows平台安装 不懂请移步: RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列 一、理论 .net环境下,C#代码订阅RabbitMQ消息队列,本文用easynetq开源的.net Rabbitmq api来实现,EasyNetQ 是一个易于使用的RabbitMQ的.Net客户端API,本文win服务基于topshe...

weixin_34411563的博客 898

如何构建高质量的 QA 问答知识库

NLP 技术落地最普遍的场景就是智能客服,如阿里的”小蜜“,京东的“JIMI”等等。NLP 技术也广泛应用于搜索系统。无论是“智能客服”,还是“搜索系统”,构建的前提是拥有“高质量的QA知识库”。今天聊聊“如何构建高质量QA知识库。”。 历史对话数据分布分析 基于公司现有系统积累的大规模对话文本数据,需要对文本数据进行归类处理,分析每个部分数据的占比,挖掘出有价值的文本通过 NLP 相关技术进行商业价值转化。下文以医疗领域来举例说明,通过输入对象,可以将文本分为客服输入和用户输入两部分。挖掘相关问题,主要从

Jiassheng的博客 2153

ICT调试技巧:从基础到实战的全面指南

本文提供了一份全面的ICT调试技巧指南,涵盖从基础认知到实战应用的全过程。详细解析了ICT设备硬件结构、程序文件构成,并重点讲解了调试界面的核心参数与高效快捷键。通过跳线、电阻、电容及二极管等常见元器件的实战调试案例,分享了参数设置要点与典型问题解决方案,帮助工程师快速掌握ICT调试核心技能,提升测试效率与准确性。

weixin_29202213的博客 342

RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列

一、理论: .net环境下,C#代码调用RabbitMQ消息队列,本文用easynetq开源的.net Rabbitmq api来实现。 EasyNetQ是一个易于使用的RabbitMQ的.Net客户端API。 RabbitMQ是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 ...

weixin_34029680的博客 282

J204B接口数据链路的建立

介绍J204B数据链路层的建立方式

QUACK_G的博客 6548

c# 创建委托 消息订阅_RabbitMQ入门学习系列(四) 发布订阅模式

发布订阅模式### 什么时发布订阅模式把消息发送给多个订阅者。也就是有多个消费端都完整的接收生产者的消息换句话说 把消息广播给多个消费者### 消息模型的核心RabbitMQ不发送消息给队列,生产者也不知道消息发送到队列生产者只发送消息到exchange 交换器,exchange一方面从生产者接收消息,另一方面把消息推送到队列中。exchange必须知道如何处理接收到的消息 。是加到特定队列中,还...

weixin_33443333的博客 337

第一讲:halcon模板匹配捆绑测量矩形检测芯片针脚

使用halcon模板匹配捆绑测量矩形,检测位置发生变换的芯片针脚缺陷。

uiopmn1的博客 2995

IEC 60747-8 是由国际电工委员会(IEC)制定的标准,标题为《半导体器件 - 分立器件 - 第8部分:场效应晶体管》

IEC 60747-8 是由国际电工委员会(IEC)制定的标准,标题为《半导体器件 - 分立器件 - 第8部分:场效应晶体管》(Semiconductor devices - Discrete devices - Part 8: Field-effect transistors)。该标准详细规定了场效应晶体管(FETs)的测试方法,涵盖静态和动态特性测试,适用于多种类型的FET,包括结型场效应晶体管(JFETs)、绝缘栅场效应晶体管(MOSFETs,增强型和耗尽型)等。3. 标准其他部分(简要概述)

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 574

C#多线程技术提高RabbitMQ消费吞吐率

一、课程介绍 本次分享课程属于《C#高级编程实战技能开发宝典课程系列》中的第二部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集、整理和完善此系列课程!本次高级系列课程适合人群如下: 1、有一定的NET开发基础并对RabbitMQ技术有一定了解和认识。 2、喜欢阿笨的干货分享课程的童鞋们。 希望大家在选择阿笨的C#高级编程实战技能...

weixin_30384031的博客 126

新手友好!C#上位机调用YOLO实现设备异常检测(详细步骤,附踩坑指南)

C#上位机调用YOLO实现设备异常检测,核心是把“工控交互”和“AI检测”的优势结合起来,新手不用追求一步到位,先跑通基础流程,再逐步优化性能和功能。我当初也是从踩坑中过来的,只要把核心链路和细节摸透,其实门槛并没有想象中高。如果你们在实操中遇到了具体问题(比如相机取流卡顿、模型推理报错),可以在评论区留言,后续我也可以针对性拆解具体模块的完整代码。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 668
上一篇: RabbitMQ学习系列 : RabbitMQ安装与配置
下一篇: mysql print (写存储过程的时候输出值只能用select)
nb009网
博客等级 码龄18年 10粉丝 31原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值