Тема «Микросервисы» 06-Нативные облачные приложения

Предисловие

В предыдущей главе мы говорили о принципе и применении WebFlux . В этом разделе продолжаем делиться содержанием темы микросервисов, всего 16 разделов, а именно:

Ключевые моменты этого раздела:

  • Контекст приложения 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: иерархия классов:BeanFactoryApplicationContext

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 , получите:

Вставьте описание изображения сюда
Объясните, что дочерний контекст должен быть активирован родительским контекстом. Контекстная связь, показанная на рисунке выше:

  1. application-1 Его parentId - test
  2. проверить его parentId - это бутстрап
  3. загрузите его 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 Beans stop(). Но экземпляр 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.

рекомендация

отblog.csdn.net/qq_34361283/article/details/106445747
рекомендация