实现 RabbitMQ 实现 .NET 6 Web API 之间的通信

介绍:

在现代分布式系统中,多个微服务或 Web API 之间需要相互通信的情况很常见。虽然在某些情况下,API 到 API 的直接通信可以实现,但随着系统的增长和演进,维护起来会变得非常困难。一个确保服务间可靠且可扩展通信的有效解决方案是使用 RabbitMQ 之类的消息代理。

在本文中,我们将探讨如何将 RabbitMQ 添加到两个独立的 .NET 6 Web API 解决方案中并在它们之间建立通信。

RabbitMQ 是一个流行的开源消息代理,它提供了强大的消息传递基础架构。通过使用 RabbitMQ,您可以解耦服务、提高可扩展性,并轻松处理基于消息的通信。

在本分步指南中,我们将介绍 RabbitMQ.Client 包的安装、RabbitMQ 的配置以及每个解决方案中 RabbitMQ 服务的实现。我们将演示如何使用 RabbitMQ 作为中介在 Web API 之间发送和接收消息。

在本教程结束时,您将对如何将 RabbitMQ 集成到您的 .NET 6 Web API 中,并利用其强大的消息传递功能实现服务之间的无缝通信有深入的理解。那么,让我们开始实施吧!

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

执行

步骤1:

安装 RabbitMQ.Client 在每个 .NET 6 Web API 解决方案中,您需要安装 RabbitMQ.Client 包。

您可以通过向每个解决方案添加以下 NuGet 包引用来实现此目的:

<ItemGroup>

<PackageReference Include= "RabbitMQ.Client" Version= "6.2.2" />

</ItemGroup>

确保根据您的要求调整版本号。

步骤2:

RabbitMQ 配置 在每个解决方案中,在文件中添加 RabbitMQ 的配置部分appsettings.json

以下是一个示例配置:

{

"RabbitMQ": {

"HostName": "localhost",

"UserName": "guest",

"Password": "guest",

"ExchangeName": "my_exchange",

"QueueName": "my_queue"

}

}

根据您的 RabbitMQ 设置调整HostNameUserNamePasswordExchangeName和值。QueueName

步骤3:

实现 RabbitMQ 服务 在每个解决方案中创建一个 RabbitMQ 服务来处理消息的发送和接收。

以下是一个示例实现:

using Microsoft.Extensions.Configuration;

using RabbitMQ.Client;

using System;

using System.Text;

public interface IRabbitMQService

{

void SendMessage(string message);

void ReceiveMessage();

}

public class RabbitMQService : IRabbitMQService

{

private readonly IConfiguration _configuration;

private readonly IConnection _connection;

private readonly IModel _channel;

private readonly string _exchangeName;

private readonly string _queueName;

public RabbitMQService(IConfiguration configuration)

{

_configuration = configuration;

_exchangeName = _configuration["RabbitMQ:ExchangeName"];

_queueName = _configuration["RabbitMQ:QueueName"];

ConnectionFactory factory = new ()

{

HostName = _configuration["RabbitMQ:HostName"],

UserName = _configuration["RabbitMQ:UserName"],

Password = _configuration["RabbitMQ:Password"]

};

_connection = factory.CreateConnection();

_channel = _connection.CreateModel();

_channel.QueueDeclare(queue: _queueName, durable: false, exclusive: false, autoDelete: false, arguments: null);

}

public void SendMessage(string message)

{

var body = Encoding.UTF8.GetBytes(message);

_channel.BasicPublish(exchange: _exchangeName, routingKey: "", basicProperties: null, body: body);

}

public void ReceiveMessage()

{

EventingBasicConsumer consumer = new (_channel);

consumer.Received += (model, ea) =>

{

var body = ea.Body.ToArray();

var message = Encoding.UTF8.GetString(body);

Console.WriteLine("Received message: {0}", message);

};

_channel.BasicConsume(queue: _queueName, autoAck: true, consumer: consumer);

}

}

步骤4:

使用 RabbitMQ 服务 在每个解决方案中,使用 RabbitMQ 服务发送和接收消息。

您可以IRabbitMQService根据需要注入到您的控制器或其他类中。

以下是一个例子:

ApiController

Route("api/\[controller\]")

public class MessagesController : ControllerBase

{

private readonly IRabbitMQService _rabbitMQService;

public MessagesController(IRabbitMQService rabbitMQService)

{

_rabbitMQService = rabbitMQService;

}

HttpPost

public IActionResult SendMessage([FromBody] string message)

{

_rabbitMQService.SendMessage(message);

return Ok();

}

}

要接收消息,您可以ReceiveMessage在任何需要处理传入消息的地方调用 RabbitMQ 服务的方法。

就是这样!通过此设置,您可以从一个 .NET 6 Web API 将消息发送到 RabbitMQ 交换器,而另一个 .NET 6 Web API 可以从 RabbitMQ 队列中使用这些消息。

请记住在运行应用程序之前启动 RabbitMQ 服务器。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
让我上个超影吧3 天前
消息队列——RabbitMQ(高级)
java·rabbitmq
塔中妖3 天前
Windows 安装 RabbitMQ 详细教程(含 Erlang 环境配置)
windows·rabbitmq·erlang
Ronin3053 天前
信道管理模块和异步线程模块
开发语言·c++·rabbitmq·异步线程·信道管理
2501_941800884 天前
云计算与边缘计算:协同合作助力智慧城市建设
rabbitmq
AlickLbc5 天前
RabbitMQ安装记录
分布式·rabbitmq
pursue.dreams5 天前
Windows 安装 RabbitMQ 保姆级教程
windows·rabbitmq
切糕师学AI6 天前
RabbitMQ 是什么?
微服务·消息队列·rabbitmq
Anastasiozzzz6 天前
解决 RabbitMQ 的可靠性投递与消息重复消费问题思路
分布式·rabbitmq
Ronin3056 天前
订阅者模块
rabbitmq
fchampion7 天前
最终一致性
java·spring·rabbitmq·github·mvc