В этой статье мы собираемся создать два микросервиса, используя веб-API .NET Core 6 и контейнеризацию, которые обслуживают с помощью Docker, и соединим их с помощью Ocelot API Gateway.

Повестка дня

  • Внедрение микросервиса
  • Внедрение шлюза API Ocelot
  • Поэтапное внедрение микросервисов
  • Контейнеризация продукта и пользовательского сервиса с помощью Docker
  • Внедрение шлюза API Ocelot

Предпосылки

  • Понимание .NET Core API, C# и Docker
  • Визуальная студия 2022
  • Пакет SDK для .NET Core 6
  • Докер Рабочий стол
  • Почтальон

Введение в микросервис

Существует два типа архитектуры приложений для проектирования: первый — монолитный, а второй — микросервисы.

1. Монолитная архитектура

  • В монолитном приложении все компоненты тесно связаны друг с другом и выполняются с использованием одного процесса.
  • В будущем при использовании монолитной архитектуры очень сложно внести какие-то изменения, потому что компоненты приложения будут тесно связаны друг с другом. Это может повлиять на все приложения при попытке изменить или добавить что-то новое в существующий компонент.
  • Предположим, у нас есть приложение электронной коммерции, и в этом приложении мы использовали несколько компонентов, таких как вход в систему, сообщения и лента новостей. В этом случае, когда мы вводим или изменяем что-то в одном из компонентов, это повлияет на приложение, потому что приложения тесно связаны и взаимосвязаны друг с другом с помощью одного сервиса.
  • Если мы развернули этот тип приложения в облаке, и в будущем нам нужно будет что-то добавить в компонент сообщений, то нам потребуется остановить все приложение. Это повлияет на производительность и эффективность служб доставки. Кроме того, им трудно управлять.

2. Микросервисная архитектура

  • В микросервисной архитектуре мы создаем компоненты приложений, которые будут работать независимо, не будучи тесно связаны друг с другом, в своих собственных средах.
  • Кроме того, мы можем легко общаться друг с другом с помощью шлюзов API и других подобных программ.
  • Итак, в основном, когда мы используем микросервисы, они будут работать в своей собственной среде, и они не будут влиять друг на друга, когда мы что-то изменим в одном из сервисов.
  • Кроме того, этим легко управлять, пока приложение находится в стадии разработки. Каждый разработчик будет работать над каждой службой независимо, поэтому компоненты легко управлять и интегрировать.

Внедрение шлюза API Ocelot

  • Ocelot — это шлюз API для платформы .NET, который работает как точка входа нашего приложения, когда мы используем микросервисную архитектуру.
  • Следующая диаграмма взята из Технической документации Microsoft.

  • Шлюз API присутствует между клиентом и микрослужбами и выступает в качестве промежуточного программного обеспечения для связи между различными микрослужбами, как показано на схеме выше.

Поэтапное внедрение микросервисов

Давайте начнем.

Шаг 1

Создайте пустое пустое решение с помощью визуальной студии.

Шаг 2

Настройте свой проект.

Шаг 3

Структура проекта:

Шаг 4

Создайте новую папку внутри решения и назовите ее Microservices. Затем создайте внутри него проекты ProductMicroservice и UserMicroservice.

Шаг 5

Настройте проект ProductMicroservice и путь службы.

Шаг 6

Предоставьте дополнительную информацию, связанную с проектом.

Шаг 7

Затем создайте проект UserMicroservice в папке Microservices и выполните те же действия, что и для создания ProductMicroservice.

Шаг 8

Создайте проект веб-API Ocelot API Gateway вне папки Microservices.

Приступим к реализации ProductMicroservice

Структура проекта

Шаг 1

Установите следующие пакеты NuGet.

Шаг 2

Создайте класс продукта в папке модели.

Шаг 3

Затем создайте DbContextClass в папке Data.

Шаг 4

После этого создайте IProductService и ProductService внутри папки services.

IPProductService

Продукт-сервис

Шаг 5

Настройте строку подключения в файле appsetting.json.

Шаг 6

Позже настройте несколько служб внутри класса Program.cs.

Шаг 7

Затем создайте ProductsController.cs.

Шаг 8

Наконец, выполните следующую команду в консоли диспетчера пакетов, чтобы выполнить миграцию и создать базу данных.

add-migration "Initial"
update-database

Реализация сервиса UserMicroservice

Структура проекта:

Шаг 1

Установите следующие пакеты NuGet:

Шаг 2

Создайте класс пользователя в папке модели.

Шаг 3

Затем создайте DbContextClass в папке Data.

Шаг 4

После этого создайте IUserService и UserService внутри папки services.

Иусерсервис

Пользовательская служба

Шаг 5

Настройте строку подключения в файле appsetting.json.

Шаг 6

Позже настройте несколько служб внутри класса Program.cs.

Шаг 7

Затем создайте UsersController.cs.

Наконец, выполните следующую команду в консоли диспетчера пакетов, чтобы создать миграцию и создать базу данных.

add-migration "Initial"
update-database

Контейнеризация продукта и пользовательского сервиса с помощью Docker

Шаг 1

Создайте файл Docker для ProductMicroservice внутри корневой папки.

Шаг 2

Затем создайте файл Docker для UserMicroservice внутри корневой папки.

Шаг 3

Создайте файл docker-compose.yml в основной папке решения.

  • Здесь вы можете видеть, что мы используем раздел среды для переопределения строки подключения, которая присутствует в файле appsetting.json.
  • Кроме того, мы помещаем IP-адрес нашей машины в строку подключения и порт, на котором работает наш SQL Server. Потому что, если вы укажете прямое имя сервера, оно покажет некоторую ошибку, когда вы перемещаетесь по своему приложению, которое запускается в контейнере докеров.
  • Вы можете получить свой IP-адрес с помощью команды ipconfig через CMD.

Шаг 4

Откройте CMD в основной папке решения, где находится файл docker-compose.yml, и выполните следующую команду.

docker-compose build
docker-compose up

Шаг 5

Откройте Docker Desktop, и вы увидите внутри два созданных образа, которые находятся в рабочем режиме.

Шаг 6

Откройте раздел «Контейнер», и там вы увидите два ваших образа, работающих внутри контейнера с их индивидуальными номерами портов.

Шаг 7

Используйте следующие URL-адреса, чтобы проверить функциональность ваших микросервисов, которые работают внутри контейнера докеров.

Продукт Сервис

https://localhost:4201/swagger/index.html

Служба пользователя

https://localhost:4202/swagger/index.html

Внедрение шлюза API Ocelot

Шаг 1

Установите пакет Ocelot NuGet.

Шаг 2

Структура проекта:

Шаг 3

Создайте файл ocelot.json для маршрутизации.

  • Файл Ocelot состоит из двух разделов: один — Global Configuration, который действует как точка входа нашего приложения; а другой — Routes, который используется для определения маршрутов наших микросервисов.
  • Здесь мы помещаем порт наших сервисов, которые работают внутри док-контейнера.
  • UpstreamPathTemplate используется для получения клиентских запросов и перенаправления их в конкретную микрослужбу.
  • UpstreamHttpMethod используется для определения атрибутов HTTP, которые помогают шлюзу получить тип запроса.
  • DownstreamTemplatePath — это конечная точка микрослужбы, которая принимает запрос от UpstreamPathTemplate.
  • DownstreamScheme определяет схему запроса.
  • DownstreamHostAndPorts определяет имя хоста и номер порта микрослужб, присутствующих в файле lauchSetting.json.

Шаг 4

Настройте файл ocelot.json внутри класса Program.cs и зарегистрируйте связанные с ним службы.

Шаг 5

Щелкните решение правой кнопкой мыши и откройте свойство. Затем подайте заявку на запуск проектов API Gateway, которые мы создали.

Шаг 6

После запуска проекта Ocelot API Gateway вы увидите этот пользовательский интерфейс swagger

Шаг 7

Откройте Почтальон и проверьте работоспособность

Заключение

В этой статье мы обсудили работу микросервисной архитектуры и API-шлюза Ocelot с использованием .NET Core 6 API, а также контейнеризацию приложений с помощью Docker.

Удачного кодирования!