Это вторая часть, в которой мы собираемся создавать микросервисы. Итак, у нас будет апигейт оцелот и два микросервиса — Товары и Заказы. Начнем с микросервисов.

Сначала создайте новый проект из CLI. dotnet new webapi -n Products — это команда для создания нового проекта веб-API.

dotnet новые продукты webapi -o

Товары

Это наш первый микросервис под названием products. Теперь создайте новый контроллер с именем ProductsController.cs.

using Microsoft.AspNetCore.Mvc;

namespace apigateway.Controllers;

[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    [HttpGet]
    public List<string> Get()
    {
        List<string> products = new List<string>();
        products.Add("Samsung products");
        products.Add("Apple products");
        products.Add("Google products");
        products.Add("Microsoft products");
        return products;
    }
}
Войти в полноэкранный режим

Выйти из полноэкранного режима

Этот метод get вернет список продуктов. Микросервис «Продукты» работает на http://локальный:8001. Когда вы нажмете http://локальный:8001/апи/продукты. Он вернет следующий ответ.

Реакция продукта

Теперь у нас есть один запущенный и работающий микросервис. Создайте второй микросервис под названием Orders. Для создания второго микросервиса выполните те же действия.

dotnet новый webapi -o Заказы

Заказы

Это наш второй микросервис под названием заказы. Теперь создайте новый контроллер с именем OrdersController.cs.

using Microsoft.AspNetCore.Mvc;

namespace apigateway.Controllers;

[ApiController]
[Route("api/[controller]")]
public class OrdersController : ControllerBase
{
    [HttpGet]
    public List<string> Get()
    {
        List<string> orders = new List<string>();
        orders.Add("Order 1");
        orders.Add("Order 2");
        orders.Add("Order 3");
        orders.Add("Order 4");
        return orders;
    }
}
Войти в полноэкранный режим

Выйти из полноэкранного режима

Микросервис заказов работает на http://локальный:8002. Когда ты ударишь http://локальный:8002/апи/заказы. Он вернет следующий ответ.

Ответ на заказ

Эти микросервисы предназначены только для реализации архитектуры микросервисов. С помощью этого микросервиса вы получите знания
архитектуры микросервисов с помощью APIGateway.

Теперь вот главный шаг. Мы должны реализовать apigateway. Выполните те же шаги для создания проекта. Нам нужно создать еще один проект для apigateway.

dotnet новый webapi -o Apigateway

После создания проекта вам необходимо установить пакет nuget Ocelot. Теперь установите этот пакет.

Оцелот

После установки пакета. Мы должны обновить program.cs.

using Ocelot.DependencyInjection;
using Ocelot.Middleware;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Configuration.SetBasePath(builder.Environment.ContentRootPath).AddJsonFile("Ocelot.json", optional: false, reloadOnChange: true).AddEnvironmentVariables();
builder.Services.AddOcelot(builder.Configuration);

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
await app.UseOcelot();
app.Run();
Войти в полноэкранный режим

Выйти из полноэкранного режима

Здесь мы добавили несколько строк кода для Ocelot. builder.Configuration.SetBasePath установит FileProvider для файловых поставщиков на PhysicalFileProvider с базовым путем. Для этого нам нужно создать Ocelot.json.

Оцелот.json

{
    "Routes": [
        {
            "DownstreamPathTemplate": "/api/products",
            "DownstreamScheme": "http",
            "DownstreamHostAndPorts": [
                {
                    "Host": "localhost",
                    "Port": 8001
                }
            ],
            "UpstreamPathTemplate": "/products",
            "UpstreamHttpMethod": [
                "Get"
            ]
        },
        {
            "DownstreamPathTemplate": "/api/orders",
            "DownstreamScheme": "http",
            "DownstreamHostAndPorts": [
                {
                    "Host": "localhost",
                    "Port": 8002
                }
            ],
            "UpstreamPathTemplate": "/orders",
            "UpstreamHttpMethod": [
                "Get"
            ]
        }
    ]
}
Войти в полноэкранный режим

Выйти из полноэкранного режима

DownstreamPathTemplate : конечная точка микрослужбы.
Схема нисходящего потока : Схема микросервиса.
DownstreamHostAndPorts : Здесь нужно указать хост и порт микросервиса.
UpstreamPathTemplate : Путь, по которому клиент будет запрашивать шлюз Ocelot Apigateway.
UpstreamHttpMethod : Метод HTTP к апишлюзу. Метод должен совпадать с методом конечной точки.

Apigateway работает на http://локальный:8888. Apigateway будет выступать в качестве единой точки входа для всех наших микросервисов. Давайте проверим, правильно ли работает API-шлюз.

ответ почтальона на продукты

почтальон отвечает на заказы

В следующей статье мы собираемся докеризовать микросервисы и APIGateway.