Переключить микросервис spring-webflux на http / 2 (нетто) - PullRequest
0 голосов
/ 16 мая 2018

Есть ли кто-нибудь, кто использовал spring-webflux с netty (http / 2)?

Весенняя документация говорит:

Вы можете включить поддержку HTTP / 2 в приложении Spring Boot с помощью свойства конфигурации server.http2.enabled. Эта поддержка зависит от выбранного веб-сервера и среды приложения, так как этот протокол не поддерживается из коробки JDK8. Spring Boot не поддерживает h2c, версию протокола HTTP / 2 в виде открытого текста. Поэтому вы должны сначала настроить SSL.

Этот флаг не работает для меня.

Я использовал:

  1. JDK8
  2. org.springframework.boot: весна-загрузки-стартер-родитель: 2.0.2.RELEASE
  3. Netty 4.1.24.Final

Пожалуйста, посмотрите на мой конфиг:

application.yml

HTTP также работает. Но протокол все тот же (http / 1.1)

enter image description here.

Это проблема ALPN? Должен ли я обновить свое приложение до JDK10? Буду признателен за любые предложения. Спасибо.

Ответы [ 4 ]

0 голосов
/ 19 октября 2018

Короче говоря, это поддерживается в Spring Framework 5.1.В JDK1.8 вам необходимо использовать собственную библиотеку для поддержки ALPN.

Цитируемое утверждение из документа Spring вводит в заблуждение.

Spring HTTP / 2 вики-страница (https://github.com/spring-projects/spring-framework/wiki/HTTP-2-support) имеетдополнительная актуальная информация:

Reactor Netty

Начиная с Spring Framework 5.1 (Reactor Netty 0.8), этот сервер также поддерживает HTTP / 2. Развертывания JDK9 + будут поддерживатьпротокол без особых изменений инфраструктуры.

Для сред JDK 8 или для обеспечения оптимальной производительности во время выполнения этот сервер также поддерживает HTTP / 2 с собственными библиотеками. Для этого вашему приложению требуется дополнительная зависимость.

Вот pom.xml, который работает для меня:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>demo</name>
<description>Demo project for Spring Boot</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.0.BUILD-SNAPSHOT</version>
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>io.projectreactor</groupId>
        <artifactId>reactor-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-tcnative-boringssl-static</artifactId>
        <version>2.0.17.Final</version>
    </dependency>

</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

<!-- Add Spring repositories -->
<!-- (you don't need this if you are using a .RELEASE version) -->
<repositories>
    <repository>
        <id>spring-snapshots</id>
        <url>https://repo.spring.io/snapshot</url>
        <snapshots><enabled>true</enabled></snapshots>
    </repository>
    <repository>
        <id>spring-milestones</id>
        <url>https://repo.spring.io/milestone</url>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>spring-snapshots</id>
        <url>https://repo.spring.io/snapshot</url>
    </pluginRepository>
    <pluginRepository>
        <id>spring-milestones</id>
        <url>https://repo.spring.io/milestone</url>
    </pluginRepository>
</pluginRepositories>

Два ключевых момента:

  1. он использует spring-boot-starter-parent 2.1.0.BUILD-SNAPSHOT. Если версия выпуска доступна, вам не нужно иметь репозиторий в файле pom.
  2. он использует netty-tcnative-boringssl-static nativeбиблиотека для поддержки ALPN (необходима для JDK1.8)
0 голосов
/ 17 мая 2018

Tomcat встраивается работает с h2. Причал и откат тоже думаю. Так в действительности: каждый поддерживаемый встроенный контейнер, но нетто: -)

0 голосов
/ 17 мая 2018

Вы можете разместить nginx перед webflux и настроить nginx на строку конфигурации listen 443 ssl http2;

0 голосов
/ 16 мая 2018

https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#webflux-http2

Кажется, я нашел ответ. Документы Webflux :

В настоящее время Spring WebFlux не поддерживает HTTP / 2 с Netty.Также не поддерживается программная передача ресурсов клиенту.

...