Взаимодействие между микросервисами в C#

Микросервисная архитектура позволяет разрабатывать гибкие, масштабируемые и отказоустойчивые системы, разделяя функциональность на независимые сервисы. Одним из ключевых аспектов такой архитектуры является организация эффективного взаимодействия между сервисами. В C# для этого используются несколько подходов:

REST API

ASP.NET Core позволяет легко создавать REST API для взаимодействия между сервисами.

[ApiController]
[Route("api/orders")]
public class OrdersController : ControllerBase
{
    [HttpGet("{id}")]
    public IActionResult GetOrder(int id)
    {
        var order = new { Id = id, Product = "Laptop", Price = 1000 };
        return Ok(order);
    }
}

gRPC

Для более эффективного взаимодействия можно использовать gRPC.

public class OrderService : OrderServiceBase
{
    public override Task<OrderResponse> GetOrder(OrderRequest request, ServerCallContext context)
    {
        return Task.FromResult(new OrderResponse { Id = request.Id, Product = "Laptop", Price = 1000 });
    }
}

Очереди сообщений

Использование очередей сообщений помогает организовать асинхронное взаимодействие между микросервисами.

Пример работы с RabbitMQ

var factory = new ConnectionFactory() { HostName = "localhost" };

using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();

channel.QueueDeclare(queue: "orders", durable: false, exclusive: false, autoDelete: false, arguments: null);

var message = "Новый заказ";
var body = Encoding.UTF8.GetBytes(message);

channel.BasicPublish(exchange: "", routingKey: "orders", basicProperties: null, body: body);

Выбор метода взаимодействия между микросервисами зависит от требований системы. REST API подходит для синхронного общения, очереди сообщений — для асинхронного. gRPC обеспечивает более эффективное двустороннее взаимодействие благодаря бинарному формату данных и поддержке потоков.