在一个.NET Core项目中使用RabbitMQ进行即时消息管理

server/2024/9/24 15:22:59/

为了在一个.NET Core项目中使用RabbitMQ进行即时消息管理,以下是详细的全程操作指南,包括安装、配置、编写代码和调试使用。
在这里插入图片描述

一、安装RabbitMQ

1. 安装Erlang

RabbitMQ依赖Erlang,因此需要先安装Erlang。

  • Windows:
    下载并运行Erlang安装程序:Erlang下载页面
2. 安装RabbitMQ
  • Windows:
    下载并运行RabbitMQ安装程序:RabbitMQ下载页面

二、配置RabbitMQ

1. 启用管理插件

打开命令提示符,并运行以下命令:

rabbitmq-plugins enable rabbitmq_management
2. 创建用户并设置权限
rabbitmqctl add_user myuser mypassword
rabbitmqctl set_permissions -p / myuser ".*" ".*" ".*"
rabbitmqctl set_user_tags myuser administrator
3. 访问管理界面

在浏览器中访问:http://localhost:15672
使用刚才创建的用户名 myuser 和密码 mypassword 登录。

三、在.NET Core项目中使用RabbitMQ

在这里插入图片描述

1. 创建.NET Core项目

打开命令提示符或PowerShell,进入你想创建项目的目录,然后运行以下命令:

dotnet new console -n IMProject
cd IMProject

在这里插入图片描述

2. 安装RabbitMQ.Client包

在项目目录中运行以下命令安装RabbitMQ的客户端库:

dotnet add package RabbitMQ.Client
3. 编写发送和接收消息的代码
发送消息 (Producer)

创建一个文件 Producer.cs,内容如下:

using System;
using RabbitMQ.Client;
using System.Text;class Producer
{public static void Main(){var factory = new ConnectionFactory() { HostName = "localhost" };using (var connection = factory.CreateConnection())using (var channel = connection.CreateModel()){channel.QueueDeclare(queue: "chat",durable: false,exclusive: false,autoDelete: false,arguments: null);string message = "Hello World!";var body = Encoding.UTF8.GetBytes(message);channel.BasicPublish(exchange: "",routingKey: "chat",basicProperties: null,body: body);Console.WriteLine(" [x] Sent {0}", message);}}
}
接收消息 (Consumer)

创建一个文件 Consumer.cs,内容如下:

using System;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System.Text;class Consumer
{public static void Main(){var factory = new ConnectionFactory() { HostName = "localhost" };using (var connection = factory.CreateConnection())using (var channel = connection.CreateModel()){channel.QueueDeclare(queue: "chat",durable: false,exclusive: false,autoDelete: false,arguments: null);var 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);};channel.BasicConsume(queue: "chat",autoAck: true,consumer: consumer);Console.WriteLine(" [*] Waiting for messages. To exit press CTRL+C");Console.ReadLine();}}
}

四、调试和运行

在这里插入图片描述

1. 运行接收消息的程序

在命令提示符或PowerShell中,运行以下命令:

dotnet run --project ./Consumer.csproj

你应该会看到类似以下的输出:

 [*] Waiting for messages. To exit press CTRL+C
2. 运行发送消息的程序

打开另一个命令提示符或PowerShell窗口,运行以下命令:

dotnet run --project ./Producer.csproj

你应该会看到类似以下的输出:

 [x] Sent Hello World!

在接收消息的程序窗口中,你应该会看到类似以下的输出:

 [x] Received Hello World!

五、集成到IM项目中

为了将RabbitMQ集成到一个更复杂的IM项目中,你可以创建一个ASP.NET Core Web API项目,并在控制器中使用RabbitMQ来发送和接收消息。

1. 创建ASP.NET Core Web API项目

在命令提示符或PowerShell中,运行以下命令:

dotnet new webapi -n IMWebApi
cd IMWebApi
2. 安装RabbitMQ.Client包

在项目目录中运行以下命令安装RabbitMQ的客户端库:

dotnet add package RabbitMQ.Client
3. 创建消息服务

创建一个文件 Services/RabbitMQService.cs,内容如下:

using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text;public class RabbitMQService
{private readonly ConnectionFactory _factory;public RabbitMQService(){_factory = new ConnectionFactory() { HostName = "localhost" };}public void SendMessage(string message){using (var connection = _factory.CreateConnection())using (var channel = connection.CreateModel()){channel.QueueDeclare(queue: "chat",durable: false,exclusive: false,autoDelete: false,arguments: null);var body = Encoding.UTF8.GetBytes(message);channel.BasicPublish(exchange: "",routingKey: "chat",basicProperties: null,body: body);Console.WriteLine(" [x] Sent {0}", message);}}public void ReceiveMessages(){using (var connection = _factory.CreateConnection())using (var channel = connection.CreateModel()){channel.QueueDeclare(queue: "chat",durable: false,exclusive: false,autoDelete: false,arguments: null);var 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);};channel.BasicConsume(queue: "chat",autoAck: true,consumer: consumer);Console.WriteLine(" [*] Waiting for messages. To exit press CTRL+C");Console.ReadLine();}}
}
4. 创建控制器

创建一个文件 Controllers/ChatController.cs,内容如下:

using Microsoft.AspNetCore.Mvc;[ApiController]
[Route("[controller]")]
public class ChatController : ControllerBase
{private readonly RabbitMQService _rabbitMQService;public ChatController(){_rabbitMQService = new RabbitMQService();}[HttpPost("send")]public IActionResult SendMessage([FromBody] string message){_rabbitMQService.SendMessage(message);return Ok("Message sent");}[HttpGet("receive")]public IActionResult ReceiveMessages(){_rabbitMQService.ReceiveMessages();return Ok("Receiving messages");}
}
5. 运行Web API

在命令提示符或PowerShell中,运行以下命令:

dotnet run

你可以使用Postman或其他API测试工具来发送和接收消息:

  • 发送消息:POST http://localhost:5000/chat/send,请求体为纯文本消息。
  • 接收消息:GET http://localhost:5000/chat/receive

六、调试和测试

在这里插入图片描述

1. 发送消息

使用Postman发送一个POST请求到http://localhost:5000/chat/send,请求体为纯文本消息,例如:“Hello from Postman”。

2. 接收消息

在浏览器或Postman中发送一个GET请求到http://localhost:5000/chat/receive,你应该会在控制台中看到接收到的消息。

七、总结

通过以上步骤,你已经成功地在一个.NET Core项目中使用RabbitMQ进行即时消息管理。你可以根据项目的需求进一步扩展和优化。例如,使用依赖注入来管理RabbitMQService,处理消息的持久化存储,添加更多的业务逻辑等。

//python 因为爱,所以学
print("Hello, Python!")

关注我,不迷路,共学习,同进步

关注我,不迷路,共学习,同进步


http://www.ppmy.cn/server/121399.html

相关文章

切换笔记本键盘的启用与禁用状态

使用批处理脚本切换笔记本键盘的启用与禁用状态 背景描述详细步骤及代码解释1. 在管理员模式下运行脚本2. 脚本内容3. 解释 背景描述 在笔记本电脑中,在外接键盘的时候,有时我们希望禁用内置键盘,防止意外按键。Windows 系统中,键…

爬虫的流程

爬虫的流程 获取网页提取信息保存数据自动化程序能爬怎样的数据 获取网页 获取网页就是获取网页的源代码,源代码里包含了网页的部分有用信息,所以只要把源代码获取下来,就可以从中提取想要的信息浏览器访问网页的本质:浏览器向服…

微服务--Gateway网关

在微服务架构中,Gateway(网关)是一个至关重要的组件,它扮演着多种关键角色,包括路由、负载均衡、安全控制、监控和日志记录等。 Gateway网关的作用 统一访问入口: Gateway作为微服务的统一入口&#xff0c…

鸿蒙HarmonyOS开发:一次开发,多端部署(界面级)天气应用案例

文章目录 一、布局简介二、典型布局场景三、侧边栏 SideBarContainer1、子组件2、属性3、事件 四、案例 天气应用1、UX设计2、实现分析3、主页整体实现4、具体代码 五、运行效果 一、布局简介 布局可以分为自适应布局和响应式布局,二者的介绍如下表所示。 名称简介…

【C++掌中宝】深入理解函数重载:概念、规则与应用

文章目录 引言1. 什么是函数重载?2. 为什么需要函数重载?3. 编译器如何解决命名冲突?4. 为什么返回类型不参与重载?5. 重载函数的调用匹配规则6. 编译器如何解析重载函数的调用?7. 重载的限制与注意事项8. 总结结语 引…

蓝桥杯算法之暴力

暴力 1.十进制数转换成罗马数字 2.判断给出的罗马数字是否正确 小知识 %(模除): % 符号用作模除(或取模)运算符。模除运算是一种数学运算,它返回两个数相除的余数。 具体来说,如果 a 和 b 是…

锐尔15注册机 锐尔文档扫描影像处理系统15功能介绍

锐尔文档扫描影像处理系统是一款全中文操作界面的文件、档案扫描及影像优化处理软件,是目前国内档案数字化行业里专业且优秀的影像优化处理软件。 无论是从纸质文件制作高质量的影像文件,或是检查已经制作好的影像文件,锐尔文档扫描影像处理…

计算机毕业设计 基于Python内蒙古旅游景点数据分析系统 Django+Vue 前后端分离 附源码 讲解 文档

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…