Рубрики
Без рубрики

Конфигурация Пружинного загрузочного реактора Нетти

Узнайте о различных параметрах конфигурации сервера Reactor Netty в приложении Spring Boot

Автор оригинала: baeldung.

1. Обзор

В этом уроке мы рассмотрим различные варианты конфигурации сервера Reactor Netty в приложении Spring Boot. В конце концов, у нас будет приложение, демонстрирующее различные подходы к настройке.

2. Что Такое Реактор Нетти?

Прежде чем мы начнем, давайте посмотрим, что такое реактор Нетти и как он связан с Spring Boot.

Reactor Netty-это асинхронная платформа сетевых приложений, управляемая событиями . Он обеспечивает неблокирующие и готовые к обратному давлению TCP, HTTP и UDP клиенты и серверы. Как следует из названия, он основан на фреймворке Netty .

Теперь давайте посмотрим, где Весна и Весенний ботинок входят в картину.

Spring Web Flux является частью фреймворка Spring и обеспечивает поддержку реактивного программирования для веб-приложений. Если мы используем Web Flux в приложении Spring Boot, Spring Boot | автоматически настраивает |/Reactor Netty в качестве сервера по умолчанию . В дополнение к этому, мы можем явно добавить Reactor Netty в наш проект, и Spring Boot должен снова автоматически настроить его.

Теперь мы создадим приложение, чтобы узнать, как мы можем настроить ваш автоматически настроенный сервер Reactor Netty. После этого мы рассмотрим некоторые распространенные сценарии конфигурации.

3. Зависимости

Во-первых, мы добавим необходимую зависимость Maven.

Чтобы использовать сервер Reactor Netty, мы добавим spring-boot-starter-web flux в качестве зависимости в ваш файл pom:


    org.springframework.boot
    spring-boot-starter-webflux

Это также втянет spring-boot-starter-reactor-netty в качестве транзитивной зависимости в наш проект.

4. Конфигурация сервера

4.1. Использование файлов Свойств

В качестве первого варианта мы можем настроить сервер Netty с помощью файлов свойств. Spring Boot предоставляет некоторые из распространенных конфигураций сервера в файле application properties:

Давайте определим порт сервера в application.properties :

server.port=8088

Или мы могли бы сделать то же самое в application.yml :

server:
    port: 8088

Помимо порта сервера, Spring Boot имеет множество других доступных параметров конфигурации сервера . Свойства, начинающиеся с префикса server | позволяют переопределить конфигурацию сервера по умолчанию . Мы можем легко найти эти свойства в документации Spring в разделе КОНФИГУРАЦИЯ ВСТРОЕННОГО СЕРВЕРА |.

4.2. Использование Программной Конфигурации

Теперь давайте посмотрим, как мы можем настроить наш встроенный сервер Netty с помощью кода . Для этой цели Spring Boot предоставляет нам классы WebServer Factory Customized и Netty Server Customizer .

Давайте используем эти классы для настройки порта Netty, как мы делали ранее с нашим файлом свойств:

@Component
public class NettyWebServerFactoryPortCustomizer 
  implements WebServerFactoryCustomizer {

    @Override
    public void customize(NettyReactiveWebServerFactory serverFactory) {
        serverFactory.setPort(8088);
    }
}

Spring Boot подберет наш настроенный на заводе компонент во время запуска и настроит порт сервера.

В качестве альтернативы мы можем реализовать Netty Server Customizer :

private static class PortCustomizer implements NettyServerCustomizer {
    private final int port;

    private PortCustomizer(int port) {
        this.port = port;
    }
    @Override
    public HttpServer apply(HttpServer httpServer) {
        return httpServer.port(port);
    }
}

И добавьте его на фабрику серверов:

serverFactory.addServerCustomizers(new PortCustomizer(8088));

Эти два подхода дают нам большую гибкость при настройке нашего встроенного сервера Reactor Netty.

Кроме того, мы также можем получить доступ к классу Server Bootstrap из Netty framework и выполнить там ваши настройки:

private static class EventLoopNettyCustomizer implements NettyServerCustomizer {

    @Override
    public HttpServer apply(HttpServer httpServer) {
        EventLoopGroup parentGroup = new NioEventLoopGroup();
        EventLoopGroup childGroup = new NioEventLoopGroup();
        return httpServer.tcpConfiguration(tcpServer -> tcpServer
          .bootstrap(serverBootstrap -> serverBootstrap
            .group(parentGroup, childGroup)
            .channel(NioServerSocketChannel.class)));
    }
}

Однако в этом случае есть одно предостережение. Поскольку Spring Boot автоматически настраивает сервер Netty, нам может потребоваться пропустить автоматическую настройку, явно определив наш NettyReactiveWebServerFactory bean.

Для этой цели мы должны определить ваш компонент в классе конфигурации и добавить туда наши настройки:

@Bean
public NettyReactiveWebServerFactory nettyReactiveWebServerFactory() {
    NettyReactiveWebServerFactory webServerFactory = new NettyReactiveWebServerFactory();
    webServerFactory.addServerCustomizers(new EventLoopNettyCustomizer());
    return webServerFactory;
}

Далее мы продолжим с некоторыми распространенными сценариями конфигурации Netty.

5. Настройка SSL

Давайте посмотрим, как мы можем настроить SSL.

Мы будем использовать класс Ssl Server Customizer , который является другой реализацией Netty Server Customizer :

@Component
public class NettyWebServerFactorySslCustomizer 
  implements WebServerFactoryCustomizer {

    @Override
    public void customize(NettyReactiveWebServerFactory serverFactory) {
        Ssl ssl = new Ssl();
        ssl.setEnabled(true);
        ssl.setKeyStore("classpath:sample.jks");
        ssl.setKeyAlias("alias");
        ssl.setKeyPassword("password");
        ssl.setKeyStorePassword("secret");
        Http2 http2 = new Http2();
        http2.setEnabled(false);
        serverFactory.addServerCustomizers(new SslServerCustomizer(ssl, http2, null));
        serverFactory.setPort(8443);
    }
}

Здесь мы определили наши свойства, связанные с хранилищем ключей, отключили HTTP/2 и установили порт на 8443.

6. Конфигурация журнала доступа

Теперь мы рассмотрим, как настроить ведение журнала доступа с помощью Logback .

Spring Boot позволяет нам настроить ведение журнала доступа в файле свойств приложения для Tomcat, Jetty и Undertow. Однако у Нетти пока нет такой поддержки.

Чтобы включить ведение журнала доступа Netty, мы должны установить -Director.netty.http.server.access Log Enabled=true при запуске нашего приложения:

mvn spring-boot:run -Dreactor.netty.http.server.accessLogEnabled=true

7. Заключение

В этой статье мы рассмотрели, как настроить сервер Reactor Netty в приложении Spring Boot.

Во-первых, мы использовали общие возможности конфигурации на основе свойств Spring Boot. А затем мы изучили, как программно настроить Netty в мелкозернистой манере.

Наконец, исходный код этой статьи доступен на Github .