В этой статье мы собираемся создать два микросервиса, используя веб-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.
Удачного кодирования!