Реализация микросервиса чтения 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
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.