Каталог навигации
Предисловие
В предыдущей главе мы говорили о принципе и применении WebFlux . В этом разделе продолжаем делиться содержанием темы микросервисов, всего 16 разделов, а именно:
- Тема микросервиса 01-Spring Application
- Тема микросервиса 02-Spring Технология просмотра веб-MVC
- Тема микросервиса 03-REST
- Тема микросервиса 04-Spring принцип WebFlux
- Тема микросервиса 05-Spring Приложение WebFlux
- Тема «Микросервисы» 06-Нативные облачные приложения
- Тема микросервиса 07-Spring Управление конфигурацией облака
- Тема микросервиса 08 - Обнаружение облачных сервисов Spring
- Тема по микросервисам 09 - Балансировка нагрузки в облаке Spring
- Тема микросервиса 10-Spring Cloud service выключатель
- Тема микросервисов 11 - вызов службы Spring Cloud
- Тема микросервисов 12-Spring Cloud Gateway
- Тема по микросервисам 13-Spring Cloud Stream (вкл.)
- Тема микросервиса 14-Spring Cloud Bus
- Тема микросервиса 15 - реализация Spring Cloud Stream
- Тема микросервиса 16 - Общий обзор Spring Cloud
Ключевые моменты этого раздела:
- Контекст приложения Bootstrap: познакомьтесь с недавно представленным контекстом приложения Bootstrap в Spring Cloud, объясните его связь с контекстом приложения Spring Framework и дополнительно поймите иерархические отношения контекста приложения Bootstrap в приложениях Spring Boot.
- Введение в конечную точку: Введение в конечную точку (конечную точку) Spring Cloud Spring Boot на основе недавно представленных, таких как: перезапуск контекста:
/restart
жизненный цикл:/pause
и/resume
т. Д.
Особенности Spring Cloud
Spring Cloud стремится предоставить хорошие готовые возможности для типичных вариантов использования и механизмов расширения для других вариантов использования.
- Распределенная / версионная конфигурация
- Регистрация и открытие службы
- маршрутизация
- Сервисный звонок
- Балансировки нагрузки
- выключатель
- Распределенный обмен сообщениями
Что такое облако?
SpringCloud (Greenwich.SR5) Официальный документ Cloud Native
Cloud Native - это стиль разработки приложений, который способствует простому внедрению передовых методов непрерывной доставки и разработки, ориентированной на ценность. Смежной дисциплиной является создание приложений из 12 элементов , в которых методы разработки согласованы с поставками и операционными целями, например, посредством использования декларативного программирования, управления и мониторинга. Spring Cloud продвигает эти стили разработки различными способами. Отправной точкой является набор функций, которые должны быть легко доступны всем компонентам распределенной системы.
Spring Boot, на котором построено Spring Cloud, охватывает многие из этих функций. Spring Cloud предоставляет больше функций в виде двух библиотек: Spring Cloud context и Spring Cloud Commons. Spring Cloud Context предоставляет служебные программы и специальные службы (контекст загрузки, шифрование, область обновления и конечные точки среды) для приложений ApplicationContext Spring Cloud. Spring Cloud Commons - это набор абстрактных и общих классов, используемых в различных реализациях Spring Cloud (таких как Spring Cloud Netflix и Spring Cloud Consul).
Что такое облако? Какие направления развития? Кто-то наконец понял!
Контекст приложения Spring- ApplicationContext
Если вы хотите преуспеть, вы должны сначала заточить свои инструменты! Чтобы хорошо изучить Spring Cloud, требуется Spring Boot Foundation, а для хорошего изучения Spring Boot необходимо глубокое понимание Spring Framework. Контекст приложения Spring - очень важная часть всей среды Spring.
Мы много раз упоминали контекст приложения Spring в предыдущих главах ApplicationContext
, а также упоминали аннотацию Component
«производная» в первом разделе этой серии . Так в чем же связь? Как мы должны понимать уровень контекста приложения Spring?
Весенние события
Просмотрите ключевые классы в весенних событиях:
Класс события:ApplicationEvent
Слушатель событий: ApplicationListener
Вещатель событий: ApplicationEventMulticaster
единственный класс реализацииSimpleApplicationEventMulticaster
Отправитель события:ApplicationEventPublisher
Понять уровень контекста
Q: иерархия классов:BeanFactory
ApplicationContext
A: Мы смотрим на ApplicationContext
этот класс, он ListableBeanFactory
хорошо расширяетсяHierarchicalBeanFactory
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
...
}
Что касается структуры, ApplicationContext
связанной с BeanFactory
реализацией. ApplicationContext
Класс абстрактной реализации AbstractRefreshableApplicationContext
содержит свойства beanFactoryDefaultListableBeanFactory
Собственно по AppliationContext
наследству BeanFactoy
.
Используемый здесь шаблон проектирования - это шаблон декоратора, унаследованный и расширенный, а базовая реализация основана на расширенном примере.
подводить итоги:
-
BeanFactory
Это настоящий контейнер Bean, который управляет жизненным циклом Bean. -
ApplicationContext
Он включает в себяBeanFactory
обязанности и другие функции.
Q: ApplicationContext
Унаследовал HierarchicalBeanFactory
советы разработчикам?
A: ApplicationContext
Возможности управления жизненным циклом бина, от BeanFactory
, и это HierarchicalBeanFactory
субинтерфейс, указывающий на то, что он имеет BeanFactory
иерархические отношения. У него также есть getParent()
метод возврата родителей ApplicationContext
, их суб-интерфейсы ConfigurableApplicationContext
установили родительские ApplicationContext
возможности.
аналогия:
- Родитель
BeanFactory
(управление 10 бобами)- Ребенок
BeanFactory
(управлять 20 фасолью)- Родитель
ClassLoader
(нагрузка 10 классов)- Ребенок
ClassLoader
(нагрузка 20 классов)
Демо-версия: установите контекст Spring для запуска
@EnableAutoConfiguration
@RestController
public class SpringBootApplicationBootstrap {
public static void main(String[] args) {
AnnotationConfigApplicationContext parentContext = new AnnotationConfigApplicationContext();
parentContext.setId("test");
// 在"test" 上下文注册一个 "helloWorld" String 类型的 Bean
parentContext.registerBean("helloWorld", String.class, "Hello,World");
// 启动"test" 上下文
parentContext.refresh();
new SpringApplicationBuilder(SpringBootApplicationBootstrap.class)
.parent(parentContext) // 显式地设置双亲上下文
.run(args);
}
@Autowired // String message Bean
@Qualifier("helloWorld") // Bean 名称,来自于 “test” 上下文
private String message;
@RequestMapping("")
public String index() {
return message;
}
}
Запустите этот контекст и посетите: http: // localhost: 9091 / actator / beans , получите:
Объясните, что дочерний контекст должен быть активирован родительским контекстом. Контекстная связь, показанная на рисунке выше:
- application-1 Его parentId - test
- проверить его parentId - это бутстрап
- загрузите его parentId
null
Spring Boot 1.x по умолчанию имеет ApplicationContext. Если вы управляете контекстом независимо, есть два ApplicationContexts.
Spring Boot 2.0 объединяет ApplicationContext, а Spring Cloud добавляет Bootstrap ApplicationContext.
Означает ли это, что бутстрап должен загружать ресурсы раньше?
Понять контекст приложения Bootstrap
Осуществление ключевого вызова
Реализация Spring Boot
org.springframework.boot.builder.ParentContextApplicationContextInitializer
Реализация Spring Cloud
org.springframework.cloud.bootstrap.BootstrapApplicationListener
. Событие, которое он отслеживаетApplicationEnvironmentPreparedEvent
. Значение аргументации:Environment
готово (скорректировано)
Техническая ассоциация: уровень контекста приложения Spring, событие Spring
Понять окружающую среду
Официальный документ внешней конфигурации Spring Boot
理解 Конечные точки привода пружинного ботинка
Обычно мы говорим, что SpringBoot выполняет проверки работоспособности и использует эту технологию, но в реальных приложениях для обеспечения безопасности будут установлены разные разрешения для конечных точек. Здесь мы просто кратко представим основную ситуацию.
Установить класс запуска
@EnableAutoConfiguration
public class SpringBootApplicationBootstrap {
public static void main(String[] args) {
SpringApplication.run(SpringBootApplicationBootstrap.class,args);
}
}
Открыть все конечные точки веб-управления
spring.application.name = first-spring-cloud-app
# 设置 Web 服务端口
server.port = 9090
# 设置 Web 管理端口(服务上下文和管理上线独立)
management.server.port = 9091
# 开放 所有Web 管理 Endpoints
management.endpoints.web.exposure.include = *
Начать вывод журнала
Запустите контекст приложения Spring и перейдите по адресу: http: // localhost: 9091 / actator
JSON display:
{
"_links":{
"self":{
"href":"http://localhost:9091/actuator",
"templated":false
},
"auditevents":{
"href":"http://localhost:9091/actuator/auditevents",
"templated":false
},
"beans":{
"href":"http://localhost:9091/actuator/beans",
"templated":false
},
"health":{
"href":"http://localhost:9091/actuator/health",
"templated":false
},
"conditions":{
"href":"http://localhost:9091/actuator/conditions",
"templated":false
},
"configprops":{
"href":"http://localhost:9091/actuator/configprops",
"templated":false
},
"env":{
"href":"http://localhost:9091/actuator/env",
"templated":false
},
"env-toMatch":{
"href":"http://localhost:9091/actuator/env/{toMatch}",
"templated":true
},
"info":{
"href":"http://localhost:9091/actuator/info",
"templated":false
},
"loggers":{
"href":"http://localhost:9091/actuator/loggers",
"templated":false
},
"loggers-name":{
"href":"http://localhost:9091/actuator/loggers/{name}",
"templated":true
},
"heapdump":{
"href":"http://localhost:9091/actuator/heapdump",
"templated":false
},
"threaddump":{
"href":"http://localhost:9091/actuator/threaddump",
"templated":false
},
"metrics-requiredMetricName":{
"href":"http://localhost:9091/actuator/metrics/{requiredMetricName}",
"templated":true
},
"metrics":{
"href":"http://localhost:9091/actuator/metrics",
"templated":false
},
"scheduledtasks":{
"href":"http://localhost:9091/actuator/scheduledtasks",
"templated":false
},
"httptrace":{
"href":"http://localhost:9091/actuator/httptrace",
"templated":false
},
"mappings":{
"href":"http://localhost:9091/actuator/mappings",
"templated":false
},
"refresh":{
"href":"http://localhost:9091/actuator/refresh",
"templated":false
},
"features":{
"href":"http://localhost:9091/actuator/features",
"templated":false
}
}
}
В приведенном выше файле конфигурации я открываю все порты, поэтому я получаю адреса всех открытых конечных точек, открыв / actator, например:
"beans":{
"href":"http://localhost:9091/actuator/beans",
"templated":false
},
Затем мы посещаем: http: // localhost: 9091 / actator / beans в это время , и мы получим подробную информацию о bean-компонентах, отслеживаемых Spring:
Получите порт среды (/ actator / env)
Порт доступа: http: // localhost: 9091 / actator / env
/ активатор / пауза и / активатор / возобновить порты
Порты / actator / pause и / actator / resume по умолчанию отключены. Сначала необходимо включить конечную точку в файле конфигурации:
management.endpoint.restart.enabled=true
management.endpoint.pause.enabled=true
management.endpoint.resume.enabled=true
-
/ actator / pause ->
ApplicationContext#stop()
-> Spring LifeCycle Beansstop()
. Но экземпляр LifeCycle (ApplicationContext) не равен LifeCycle Bean -
/ actator / resume ->
ApplicationContext#start()
-> Spring LifeCycle Beansstart()
Введение в конечную точку
Исследование Spring Boot | Подробное описание конечной точки привода
постскриптум
Кодовый адрес этого раздела: https://github.com/harrypottry/microservices-project/tree/master/spring-cloud-project/spring-cloud-native-application
Чтобы узнать больше об архитектуре, обратите внимание на эту серию статей о Java : The Road to Growth of Java Architects.