Нет сомнений в том, что Spring Cloud является текущим лидером в области микросервисной архитектуры. Он построен на основе Spring Boot и в полной мере использует удобные функции разработки Spring Boot, такие как автоматическая настройка и зависимости запуска. чтение микросервиса на основе этого Сервиса проведет вас через весь процесс.
Сначала давайте рассмотрим шаги, которые проходит полный микросервис при вызове API.
Nacos используется здесь в качестве центра регистрации служб и центра конфигурации, шлюза службы шлюза, портала трафика, проверки разрешений, отказоустойчивости службы Hystrix (ограничение тока, понижение версии, автоматический выключатель), OpenFeign предоставляет общедоступный клиент для микрослужб, а служба имеет только простой сервис запроса книг для краткого описания процесса внедрения.
модуль | описывать |
---|---|
book-query-service | В основном например,Функциональный сервисный модуль только один. |
common | Публичный модуль, общие классы инструментов и т. д. |
gateway | Сервисный шлюз, проверка полномочий, управление потоками и т. д. |
openFeign | Притвориться клиентом |
Nacos — это компонент с открытым исходным кодом, который объединяет центр регистрации служб и центр конфигурации. Будучи микросервисом, служба запроса книг отправляет собственную информацию в Nacos при запуске. Он отправляет в Nacos запрос на регистрацию, содержащий такую информацию, как имя службы («служба запроса книги»), адрес экземпляра (например, IP-адрес и номер порта). Код для регистрации службы с использованием Spring Cloud и Nacos:
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 отправит соответствующую информацию о конфигурации в службу запроса книг на основе имени службы и правил файла конфигурации. Вот код для настройки клиента:
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 службы:
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 Код для настройки маршрутизации:
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 определить интерфейс. Например, определите интерфейс с именем «BookQueryClient», содержащий метод "getBookById", этот метод принимает книгу ID В качестве параметра используется для получения информации об указанной книге. Ниже приводится OpenFeign определение интерфейсаизкод ключа:
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 Вызов службы запроса книг будет отслеживаться. Например, он будет подсчитывать процент успешных звонков, время ответа и другие показатели. Когда частота сбоев службы запроса книг достигает определенного порога (например, 20%) или время отклика превышает установленное значение (например, 1000 миллисекунды), Хайстрикс Сработает механизм автоматического выключателя。к Ниже Hystrix Код конфигурации:
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:
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 Процесс реализации сервиса запроса книг в системе микросервисов чтения, включая сервис Зарегистрируйтесь. и откройте для себя、Управление конфигурацией、шлюз、сервисный вызовиразрушитель и другие компоненты из приложений,Потому что он предназначен только для развертывания приложений на основе компонентов и компонентов.,Фактической обработки бизнеса нет.,Я не буду публиковать здесь полный код😜.