Микросервисная архитектура позволяет разрабатывать гибкие, масштабируемые и отказоустойчивые системы, разделяя функциональность на независимые сервисы. Одним из ключевых аспектов такой архитектуры является организация эффективного взаимодействия между сервисами. В 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 обеспечивает более эффективное двустороннее взаимодействие благодаря бинарному формату данных и поддержке потоков.