实现 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 服务器。

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

相关推荐
开心码农1号7 小时前
Java rabbitMQ如何发送、消费消息、全套可靠方案
java·rabbitmq·java-rabbitmq
leo_messi9410 小时前
RabbitMq(五) -- SpringBoot整合 RabbitMQ 完整实现
spring boot·rabbitmq·java-rabbitmq
Arva .12 小时前
RabbitMQ消费者处理失败
分布式·rabbitmq
开心码农1号2 天前
mq是什么,常用mq的使用场景有哪些?
中间件·rabbitmq
Bohemian—Rhapsody2 天前
麒麟v10-arm架构部署rabbitmq
arm开发·架构·rabbitmq
總鑽風3 天前
数据一致性springcloud+rabbitmq+mysql+redis
mysql·spring cloud·rabbitmq
William Dawson3 天前
【实战分享】DTU设备高并发数据接入全流程(Redis + RabbitMQ + 数据库)
数据库·redis·rabbitmq
Albert Edison4 天前
【RabbitMQ】核心概念|工作流程|界面操作
分布式·rabbitmq·ruby
少许极端5 天前
消息队列5-RabbitMQ的高级特性和MQ的应用问题与解决方案-事务、消息分发的应用、幂等性保证、顺序性保证、消息积压的解决
分布式·消息队列·rabbitmq
Arva .5 天前
RabbitMQ
网络·分布式·rabbitmq