Реализация микросервиса чтения Spring Cloud
Реализация микросервиса чтения Spring Cloud

введение

Нет сомнений в том, что Spring Cloud является текущим лидером в области микросервисной архитектуры. Он построен на основе Spring Boot и в полной мере использует удобные функции разработки Spring Boot, такие как автоматическая настройка и зависимости запуска. чтение микросервиса на основе этого Сервиса проведет вас через весь процесс.

Общий процесс микросервисов

Сначала давайте рассмотрим шаги, которые проходит полный микросервис при вызове API.

  1. Служить Зарегистрируйтесь и откройте для себя(к Эврика как пример)
  2. При запуске каждого микросервиса он отправляет свою собственную информацию (например, имя сервиса, адрес экземпляра, порт и т. д.) компоненту обнаружения сервиса. В качестве клиента Eureka микросервис отправит запрос на регистрацию, содержащий собственную информацию, на сервер Eureka. После того как сервер Eureka получит запрос на регистрацию, он сохранит информацию о микросервисе в своем реестре.
  3. Управление шлюзом (на примере Spring Cloud Gateway)
  4. Все внешние запросы поступают первыми Spring Cloud Gateway。Gateway Согласно настроенным правилам маршрутизации, Маршрутизация запрос к соответствующему из микросервиса. Перед маршрутизацией запроса шлюз Можно сделать ряд запросов обработка, такая как аутентификация, проверка разрешений и т. д. Только после Предварительной Только когда запрос будет соответствовать требованиям, он будет перенаправлен в соответствующий микросервис для последующей обработки.
  5. Гарантия на автоматический выключатель (например, Hystrix)
  6. Hystrix Ситуация с вызовами службы будет отслеживаться, включая процент успешных вызовов, время ответа и другие показатели. Когда частота отказов службы достигает определенного порога (например, 50%) или время отклика превышает установленное значение (например, 1000 миллисекунды), Хайстрикс Сработает механизм автоматического выключателя。
  7. Сервисный вызов (на примере OpenFeign)
  8. Метод межсервисной связи: вызывающая микрослужба использует OpenFeign для определения интерфейса, который объявляет метод вызова вызываемой микрослужбы. OpenFeign автоматически сгенерирует классы реализации на основе определения интерфейса. Когда вызывающей микрослужбе необходимо вызвать другие микрослужбы, она сначала получает список экземпляров вызываемой микрослужбы из компонента обнаружения служб (например, Eureka). Затем выберите один из экземпляров для вызова на основе стратегии балансировки нагрузки (например, опрос, случайный и т. д.).
  9. Управление конфигурацией(к Spring Cloud Config (например)
  10. Файлы конфигурации могут храниться на различных носителях, таких как репозитории Git, локальные файловые системы и т. д. Spring Cloud Config Server отвечает за получение файлов конфигурации с этих носителей. В качестве клиента конфигурации каждый микросервис будет запрашивать сервер конфигурации для получения информации о конфигурации, необходимой ему при запуске. Config Server отправляет микросервису соответствующую информацию о конфигурации на основе имени микросервиса и правил файла конфигурации.

Чтение реализации микросервиса

Основной процесс:

Nacos используется здесь в качестве центра регистрации служб и центра конфигурации, шлюза службы шлюза, портала трафика, проверки разрешений, отказоустойчивости службы Hystrix (ограничение тока, понижение версии, автоматический выключатель), OpenFeign предоставляет общедоступный клиент для микрослужб, а служба имеет только простой сервис запроса книг для краткого описания процесса внедрения.

модуль

модуль

описывать

book-query-service

В основном например,Функциональный сервисный модуль только один.

common

Публичный модуль, общие классы инструментов и т. д.

gateway

Сервисный шлюз, проверка полномочий, управление потоками и т. д.

openFeign

Притвориться клиентом

Центр обнаружения и настройки регистрации служб — Nacos

Зарегистрируйтесь и откройте для себя

Nacos — это компонент с открытым исходным кодом, который объединяет центр регистрации служб и центр конфигурации. Будучи микросервисом, служба запроса книг отправляет собственную информацию в Nacos при запуске. Он отправляет в Nacos запрос на регистрацию, содержащий такую ​​информацию, как имя службы («служба запроса книги»), адрес экземпляра (например, IP-адрес и номер порта). Код для регистрации службы с использованием Spring Cloud и Nacos:

Язык кода:java
копировать
import org.springframework.boot.SpringBootApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class BookQueryServiceApplication {
    public static void main(String[] args) {
        SpringBootApplication.run(BookQueryServiceApplication.class, args);
    }
}

В приведенном выше коде,@EnableDiscoveryClientАннотация используется для включения Служить Откройте для себя возможности,Позволяет службе поиска книг запрашивать информацию Nacos «Зарегистрируйте» при запуске.

Механизм поддержания пульса

Служба запроса книг будет периодически отправлять пакеты пульса в Nacos (например, каждые 5 секунд). Пакеты Heartbeat используются для информирования Nacos о том, что служба все еще работает. Если Nacos не получит контрольный пакет от службы запроса книг в течение определенного периода времени (например, 15 секунд), он удалит службу из реестра служб и пометит ее как отключенную. Это гарантирует, что другие микросервисы не будут вызывать недоступный экземпляр.

Управление конфигурацией

Файлы конфигурации для служб запроса книг можно хранить в Nacos. Например, файл конфигурации может содержать информацию о подключении к базе данных, настройки параметров запроса и т. д. Когда служба запроса книг запускается, она будет действовать как клиент конфигурации Nacos и запрашивать у Nacos получение необходимой информации о конфигурации. Nacos отправит соответствующую информацию о конфигурации в службу запроса книг на основе имени службы и правил файла конфигурации. Вот код для настройки клиента:

Язык кода:java
копировать
    import org.springframework.boot.SpringBootApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.context.config.annotation.EnableConfigServer;

    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableConfigServer
    public class BookQueryServiceApplication {
        public static void main(String[] args) {
            SpringBootApplication.run(BookQueryServiceApplication.class, args);
        }
    }

В приведенном выше коде,@EnableConfigServerАннотация используется для включения配置Служить Функция,Включает услуги поиска книг от Nacos. Получите информацию о конфигурации.

Динамические обновления конфигурации

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

Наконец, настройте адрес службы Nacos в файле конфигурации yml службы:

Язык кода:yml
копировать
spring:
  # Логическое имя службы
  application:
    name: book-query-service

  cloud:
    nacos:
      # Центр конфигурации
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yml
        refresh: true
        shared-dataids: bookQueryService.yml
        namespace: 3m249b4c-d34d-4e86-9e39-d4626db45411

      # Регистрационный центр
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: 3m249b4c-d34d-4e86-9e39-d4626db45411

Шлюз - Шлюз

Маршрутизация запроса

Все внешние запросы поступают первыми Шлюз. Предполагая, что внешний запрос предназначен для запроса информации об определенной книге, запрошенный URL Может содержать определенные пути и параметры. шлюз В соответствии с настроенными правилами маршрутизации будет принято решение о том, что запрос должен быть перенаправлен в службу запроса книг. Например, если путь запроса содержит «/book/query». Такие ключевые слова, Шлюз воля Маршрутизация запрос к сервису поиска книг. Ниже приводится Gateway Код для настройки маршрутизации:

Язык кода:yml
копировать
    spring:
      cloud:
        gateway:
          routes:
          - id: book-query-route
            uri: lb://book-query-service
            predicates:
            - Path=/book/query/**

В приведенном выше коде,uri: lb://book-query-serviceУказывает на то, что это будет Маршрутизация запросаназватьbook-query-serviceиз Служить,predicatesсерединаизPath=/book/query/**Указывает, что путь запроса должен удовлетворять/book/queryначалоизсостояние。

Предварительная обработка

Перед маршрутизацией запроса шлюз Можно сделать ряд запросов обработка. Например, он может выполнять аутентификацию, проверяя, содержит ли запрос действительную идентификационную информацию пользователя (например, JWT жетон). Если аутентификация пройдена, шлюз Только тогда Маршрутизация запрос к сервису поиска книг. Если аутентификация не удалась, шлюз Может быть возвращен ответ об ошибке, информирующий пользователя о том, что аутентификация не удалась.

Вызов службы — OpenFeign

определение интерфейса

В других микросервисах, которым необходимо вызвать службу запроса книг (при условии, что существует микросервис обзора, которому необходимо получить информацию о книге для отображения связанных обзоров), он будет использоваться OpenFeign определить интерфейс. Например, определите интерфейс с именем «BookQueryClient», содержащий метод "getBookById", этот метод принимает книгу ID В качестве параметра используется для получения информации об указанной книге. Ниже приводится OpenFeign определение интерфейсаизкод ключа:

Язык кода:java
копировать
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(name = "book-query-service")
public interface BookQueryClient {
    @GetMapping("/book/{id}")
    Book getBookById(@PathVariable("id") Long id);
}

В приведенном выше коде,@FeignClient(name = "book-query-service")Аннотации используются для указания вызоваиз Служитьимя,@GetMapping("/book/{id}")иBook getBookById(@PathVariable("id") Long id)Используется для определения получения информации о книге.изметод。

Обнаружение и вызов службы

Когда микросервису просмотра необходимо вызвать службу запроса книг, он сначала Nacos Получите список экземпляров службы поиска книг. Затем один из экземпляров выбирается на основе стратегии балансировки нагрузки (например, циклического перебора). OpenFeign Будет основано на определении интерфейс автоматически генерирует классы реализации,И отправьте запрос выбранному экземпляру службы запросов книг.,Реализуйте звонки между сервисами.

Автоматический выключатель - Hystrix

Мониторинг и оценка

Hystrix Вызов службы запроса книг будет отслеживаться. Например, он будет подсчитывать процент успешных звонков, время ответа и другие показатели. Когда частота сбоев службы запроса книг достигает определенного порога (например, 20%) или время отклика превышает установленное значение (например, 1000 миллисекунды), Хайстрикс Сработает механизм автоматического выключателя。к Ниже Hystrix Код конфигурации:

Язык кода:yml
копировать
hystrix:
  command:
    default:
      circuitBreaker:
        enabled: true
        errorThresholdPercentage: 20
        sleepWindowInMilliseconds: 5000
        requestVolumeThreshold: 10

В приведенном выше коде,circuitBreakerсерединаизenabled: trueозначает включеномеханизм автоматического выключателя,errorThresholdPercentage: 20Указывает, что порог частоты отказов 20%,sleepWindowInMilliseconds: 5000Указывает, что время предохранителя 5000 миллисекунда,requestVolumeThreshold: 10Указывает, что пороговое значение количества запросов 10。

механизм автоматического выключателя

После срабатывания автоматического выключателя последующие запросы к сервису будут напрямую входить в резервную логику Hystrix. Например, резервная логика может возвращать стандартный ответ (например, информацию о книге по умолчанию, указывающую, что реальная информация не может быть получена), тем самым защищая всю систему от одного сбоя службы. Ниже приведен код резервного метода Hystrix:

Язык кода:java
копировать
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(name = "book-query-service", fallback = BookQueryFallback.class)
public interface BookQueryClient {
    @GetMapping("/book/{id}")
    Book getBookById(@PathVariable("id") Long id);
}

class BookQueryFallback implements BookQueryClient {
    @Override
    public Book getBookById(Long id) {
        // Возвращает информацию о книге по умолчанию.
        return new Book("Имя книги по умолчанию", "автор по умолчанию", «Профиль по умолчанию»);
    }
}

В приведенном выше коде,@FeignClient(name = "book-query-service", fallback = BookQueryFallback.class)означает, когдасервисный вызовпри неудаче,войдетBookQueryFallbackдобрыйсерединаизметод,BookQueryFallbackкласс реализованBookQueryClientинтерфейс,и переписанgetBookByIdметод,Возвращает информацию о книге по умолчанию.。

окончание

Хорошо, вышеизложенное основано на Spring Cloud Процесс реализации сервиса запроса книг в системе микросервисов чтения, включая сервис Зарегистрируйтесь. и откройте для себя、Управление конфигурацией、шлюз、сервисный вызовиразрушитель и другие компоненты из приложений,Потому что он предназначен только для развертывания приложений на основе компонентов и компонентов.,Фактической обработки бизнеса нет.,Я не буду публиковать здесь полный код😜.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose