MQ消息队列(4)C#利用RabbitMQ实现点对点消息传输-C/S开发框架

RabbitMQ做为消息代理,负责接收和转发消息,可以将RabbitMQ比喻为一个邮筒、一个邮局和一个邮递员。本文主要以一个简单的小例子,简述RabbitMQ实现消息传输的相关内容,仅供学习分享使用,如有不足之处,还请指正。
消息队列模型
所有 MQ 产品从模型抽象上来说都是一样的过程:
消费者(consumer)订阅某个队列。生产者(producer)创建消息,然后发布到队列(queue)中,最后将消息发送到监听的消费者。

RabbitMQ设置
RabbitMQ是通过交换机将消息转发到对应队列,所以队列需要和交换机进行绑定。本例将队列绑定到默认的amq.direct交换机,并设置Routing key,如下图所示:

RabbitMQ动态库安装
通过NuGet包管理器进行安装RabbitMQ.Client,如下所示:

RabbitMQ.Client相关知识点
- ConnectionFactory:构造一个实例,主要创建连接。
- IConnection:表示一个基于AMQP协议的连接。
- IModel:表示一个RabbitMQ通道,可用于声明一个队列,然后开始消费。
- EventingBasicConsumer:基于独立事件监听的基础消费者,可以监听并接收消息。
- 生产者基本步骤:1. 创建连接 2. 基于连接创建通道 3. 基于通道声明队列,4. 开始生产并发布消息
- 消费者基本步骤:1. 创建连接 2. 基于连接创建通道 3. 基于通道声明队列,4. 创建消费者,5. 绑定通道和消费者,并开始消费
示例效果图
本例主要有一个生产者,一个消费者,通过消息队列进行消息转发和接收。
生产者负责消息发送,如下图所示:

消费者负责消息接收,如下图所示:

核心代码
代码结构:主要包括生产者,消费者,公共基础代码,如下所示:

RabbitMqHelper主要创建连接,如下所示:
public class RabbitMqHelper
{
/// <summary>
/// 创建连接
/// </summary>
/// <returns></returns>
public IConnection GetConnection()
{
try
{
var factory = new ConnectionFactory()
{
HostName = "127.0.0.1",
Port = 5672,
UserName = "guest",
Password = "guest",
VirtualHost = "/ShortMsgHost"
};
var conn = factory.CreateConnection();
return conn;
}
catch (Exception ex) {
throw ex;
}
}
}
RabbmitMqSendHelper用于发送消息,如下所示:
public class RabbmitMqSendHelper : RabbitMqHelper
{
/// <summary>
/// 发送消息
/// </summary>
/// <param name="msg"></param>
/// <returns></returns>
public bool SendMsg(string msg)
{
try
{
using (var conn = GetConnection())
{
using (var channel = conn.CreateModel())
{
channel.QueueDeclare(queue: "ShortMsgQueue",
durable: true,
exclusive: false,
autoDelete: false,
arguments: null);
var body = Encoding.UTF8.GetBytes(msg);
channel.BasicPublish(exchange: "amq.direct",
routingKey: "ShortMsgKey",
basicProperties: null,
body: body);
//Console.WriteLine(" [x] Sent {0}", message);
};
};
return true;
}
catch (Exception ex)
{
throw ex;
}
}
}
RabbitMqReceiveHelper主要用于接收信息,如下所示:
public class RabbitMqReceiveHelper : RabbitMqHelper
{
public RabbitMqReceiveEventHandler OnReceiveEvent;
private IConnection conn;
private IModel channel;
private EventingBasicConsumer consumer;
public bool StartReceiveMsg()
{
try
{
conn = GetConnection();
channel = conn.CreateModel();
channel.QueueDeclare(queue: "ShortMsgQueue",
durable: true,
exclusive: false,
autoDelete: false,
arguments: null);
consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
//Console.WriteLine(" [x] Received {0}", message);
if (OnReceiveEvent != null)
{
OnReceiveEvent(message);
}
};
channel.BasicConsume(queue: "ShortMsgQueue",
autoAck: true,
consumer: consumer);
return true;
}
catch (Exception ex)
{
throw ex;
}
}
}
关于RabbitMQ的基础知识介绍,可参考前几篇博文。
参考文档:
MQ消息队列(5)C#利用RabbitMQ实现消息订阅与发布-C/S开发框架
MQ消息队列(1)RabbitMQ入门介绍及环境搭建-C/S开发框架
MQ消息队列(2)RabbitMQ概念及控制台介绍-C/S开发框架
MQ消息队列(3)RabbitMQ交换机类型简述-C/S开发框架
C# 利用ZXing.Net来生成条形码和二维码-C/S开发框架
C# 利用PrintDocument定制打印单据-C/S开发框架
企业级C/S系统快速开发框架(Winform+.NET8+EFCore)|C/S开发框架
.NET Reactor(.NET混淆器)加壳软件使用|C/S开发框架
生产制造企业的业务流程(适用软件ERP/OMS/MES)|C/S开发框架
WebApi框架 | AOP|C/S开发框架
C# .NET 入门概念与知识点总结|C/S开发框架
C#/.NET 基础学习|C/S开发框架
鹊巢PaaS快速建站系统,助力您快速搭建企业网站Web站点|Web开发框架
Winform C/S结构与Web B/S结构开发MES/ERP系统优缺点及区别|C/S开发框架
软件简介 | TMS | 物流运输管理系统|C/S开发框架
1.1 什么是ASP.NET / WebAPI / MVC?|C/S开发框架
MQ消息队列(5)C#利用RabbitMQ实现消息订阅与发布-C/S开发框架
MQ消息队列(1)RabbitMQ入门介绍及环境搭建-C/S开发框架
MQ消息队列(2)RabbitMQ概念及控制台介绍-C/S开发框架
MQ消息队列(3)RabbitMQ交换机类型简述-C/S开发框架
C# 利用ZXing.Net来生成条形码和二维码-C/S开发框架
C# 利用PrintDocument定制打印单据-C/S开发框架
企业级C/S系统快速开发框架(Winform+.NET8+EFCore)|C/S开发框架
.NET Reactor(.NET混淆器)加壳软件使用|C/S开发框架
生产制造企业的业务流程(适用软件ERP/OMS/MES)|C/S开发框架
WebApi框架 | AOP|C/S开发框架
C# .NET 入门概念与知识点总结|C/S开发框架
C#/.NET 基础学习|C/S开发框架
鹊巢PaaS快速建站系统,助力您快速搭建企业网站Web站点|Web开发框架
Winform C/S结构与Web B/S结构开发MES/ERP系统优缺点及区别|C/S开发框架
软件简介 | TMS | 物流运输管理系统|C/S开发框架
1.1 什么是ASP.NET / WebAPI / MVC?|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
