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

为了在一个.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.xdnf.cn/news/19783.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

51c大模型~合集60

我自己的原文哦~ https://blog.51cto.com/whaosoft/12102352 #百舸 当大模型Scaling Law继续,万卡集群算力释放在「百舸」这里找到一条通途 在电影《天下无贼》中,葛优扮演的黎叔有这样一句经典的台词,「二十一世纪什么最贵?人…

Auto-Py-to-Exe:一键生成可执行的EXE文件,助力 Python 项目在Windows上快速部署

Python以其简洁易懂的语法和丰富的库而闻名,但对于想要将Python项目分享给他人或进行独立部署的开发者来说,将代码打包成可执行文件往往是必不可少的一步。而Auto-Py-to-Exe就是一个功能强大的工具,它能帮助你轻松将Python脚本转换成独立的可…

如何巧妙使用AI工具

一、AI的介绍 AI:即人工智能,是计算机科学体系下的一个学科,是指通过计算机系统模拟人类智力的一种技术。 AIGC:AI领域的一个应用分支,专注于利用AI技术自动生成内容,包括文本,代码&#xff0…

C/C++ 优化,strlen 示例

目录 C/C optimization, the strlen examplehttps://hallowed-blinker-3ca.notion.site/C-C-optimization-the-strlen-example-108719425da080338d94c79add2bb372 揭开优化的神秘面纱... 让我们来谈谈 CPU 等等,SIMD 是什么? 为什么 strlen 是一个很…

性能测试

浅谈性能瓶颈之Mysql慢查询 1.开启测试环境的mysql数据库慢查询日志,然后在日志文件里自动记录这些慢查询,以及not using index的查询。数据库执行下面几个命令: set global slow_query_logon /*开启慢查询日志*/set log_queries_not_using_…

【AI+教育】一些记录@2024.11.11

《清华发布工具学习框架,让ChatGPT操控地图、股票查询,贾维斯已来?》 清华发布工具学习框架,让ChatGPT操控地图、股票查询,贾维斯已来?工具学习,清华天团让 ChatGPT 拿起专业工具https://mp.we…

图数据库 | 7、图数据库三大组件之一 之 图存储(下)

在图数据库中有三大组件——图计算、图存储以及图查询语言。上一个篇文章,老夫聊到了图存储,重点讲的是它的基础概念以及图存储引擎的架构设计中的一对重要概念——非原生图与原生图,接下来我们就聊聊关于图存储数据结构与构图的那些事儿吧。…

生产环境部署Nginx服务器双机热备部署-keepalived(多种模式教程)

前言:今天演示下生产环境keepalived的部署方式,安装模式有很多,比如说主备模型和双主模型,主备分:抢占模式 和 非抢占模式。这里我会一一展开说具体怎么配置 一、双节点均部署Nginx: 第一步:上…

陶哲轩:计算机通用方法,往往比深奥的纯数学更能解决问题

刚刚,著名数学家陶哲轩在个人社交平台更新的几篇帖子,引起大家广泛的共鸣。 陶哲轩用浅显易懂的语言表达了自己对数学的理解与思考心得。 文中谈到了一个关于「度」的问题,陶哲轩表示在设计系统时,缺乏或者过度的数学分析可能都…

NewStarCTF2024-Week3-Web-WP

目录 1、Include Me 2、blindsql1 3、臭皮踩踩背 4、臭皮的计算机 5、这“照片”是你吗 1、Include Me 使用 data 协议,结合 base64 编码绕过 payload: ?iknow1&medata://text/plain;base64,PD89c3lzdGVtKCJ0YWMgL2ZsYWciKTs 拿到 flag&#…

java版询价采购系统 招投标询价竞标投标系统 招投标公告系统源码

在信息化飞速发展的今天,电子招投标采购系统已成为企业运营中的重要一环。这一系统不仅优化了传统的招投标流程,还为企业带来了诸多显著的价值。 首先,电子招投标采购系统极大地提高了工作效率。传统招投标过程中,企业需要耗费大…

小林Coding—Java「二、Java基础篇」

󠀲󠀲二 Java基础面试篇 数据类型 引用类型 类:Class接口:Interface数组:Array枚举:Enum自动装箱:int -> Integer 自动拆箱:Integer -> int // 下面代码会先自动拆箱将sum转为…

GBDT 算法

GBDT 梯度决策提升树是将一些弱分类决策树的结果加在一起,每一棵决策树对前一颗觉得树残差进行优化,从而使得总体的损失值达到最小。 GBDT 公式 Fm-1: 上一棵树的结果 α \alpha α: 学习率 hm(x): 当前树,通过训练调整结果,降低…

java~Lambda表达式

目录 Lambda和匿名内部类 语法 函数式接口 无返回值(无参、有参) 有返回值(无参、有参) 语法精简 四个基本的函数式接口 方法引用 实例方法引用 静态方法引用 特殊方法引用 构造方法引用 数组引用 集合 List、Set …

PyQt5信号与槽二

窗口数据传递 在开发程序时,如果这个程序只有一个窗口,则应该关心这个窗口里面的各个控件之间是如何传递数据的;如果这个程序有多个窗口,那么还应该关心不同的窗口之间是如何传递数据的。对于多窗口的情况,一般有两种…

【java】多态

一、概念 多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作。 同一个事件发生在不同的对象上会产生不同的结果。 比如: public class Test {public static void main(String[] args) {Person xn…

使用Holoviews创建复杂的可视化布局

目录 一、Holoviews简介 二、安装Holoviews 三、Holoviews的基本概念 元素(Elements): 容器(Containers): 映射(Mappings): 四、基本用法 创建元素: …

Java2.1——异常

异常基本概念 一:程序出错 分类 : 编辑错误,逻辑错误,运行时错误 目的: 异常处理让程序出错了还运行,避免中止运行 二: 运行时错误 当出现编译时无法预料的问题,将运行错误报告…

2025年假期python,工作日python脚本求出 输出日期内容

# coding:utf-8 import datetime# 假设已知的节假日和调休安排 holidays [datetime.date(2025, 1, 1), # 元旦datetime.date(2025, 1, 28), # 春节datetime.date(2025, 1, 29), # 春节datetime.date(2025, 1, 30), # 春节datetime.date(2025, 1, 31), # 春节datetime.dat…

1TB! 台湾最新倾斜摄影3DTiles数据分享

之前的文章分享了546GB香港倾斜摄影3DTiles数据,主要是验证倾斜模型3DTiles转换工具的生产效率和数据显示效率,结果对比可以看出无论是数据生产速度以及成果数据显示效率上,都优于其他两种技术路线。最近使用倾斜模型3DTiles工具生产了台湾地…