当前位置: 首页 > 知识库问答 >
问题:

将spring-webtumus微服务切换到超文本传输协议/2(netty)

和弘博
2023-03-14

是否有人将spring webflux与netty(http/2)一起使用?

Spring文档说明:

您可以使用server.http2.enabled配置属性在Spring Boot应用程序中启用HTTP/2支持。此支持取决于所选的Web服务器和应用程序环境,因为JDK8不支持该协议。Spring Boot不支持HTTP/2协议的明文版本h2c。因此您必须先配置SSL。

标志服务器。http2.enabled对我不起作用。

我正在使用:

  1. JDK8

请查看我的配置:

HTTPS也可以工作。但协议仍然相同(超文本传输协议/1.1)

这是ALPN的问题吗?我应该将我的应用升级到JDK10吗?如有任何建议,我将不胜感激。谢谢

共有3个答案

双元魁
2023-03-14

Tomcat嵌入式正在使用h2。我认为Jetty和undertow也是如此。所以实际上:每个支持的嵌入式容器,但netty:-)

尉迟高澹
2023-03-14

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

看来,我找到了答案。Webflux文档:

目前,SpringWebFlux不支持HTTP/2和Netty。也不支持以编程方式将资源推送到客户端。

厍书
2023-03-14

简而言之,它在Spring Framework 5.1中受支持。对于JDK1.8,您需要使用本机库来支持ALPN。

Spring文件中引用的声明具有误导性。

Spring HTTP/2 wiki页面(https://github.com/spring-projects/spring-framework/wiki/HTTP-2-support)有更多最新信息:

Reactor网

从SpringFramework 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父代2.1.0。构建快照。如果发布版本可用,则不需要在pom文件中包含回购
 类似资料:
  • httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。 通常,httpd不应该被直接调用,而应该在类Unix系统中由apachectl调用,在Windows NT/2000/XP/2003中作为服务运行和在Windows 95/98/ME中作为控制台程序运行. 语法 httpd [ -d serverroot ]

  • 我正在从我的角UI调用Spring引导REST服务。只要Spring Boot Rest服务作为Spring Boot应用程序执行,它就运行良好。但是一旦我将其转换为WAR文件并部署在Jboss 6.2.4服务器上,我就会得到404。我看到来自UI的REST服务调用成功,但请求JSON没有通过。在请求JSON上,我正在传递2个字符串和一个上传的excel文件。 这是我的angular UI htt

  • 我正在使用GWT和Spring controller来管理http流量。有些请求可能需要很长时间,但我希望在超过给定时间时终止请求。 我如何配置超时Spring。我也使用Apache Tomcat 7.0。我试图在tomcat上inrease最大线程,但有一段时间tomcat工作缓慢,因为请求线程不会死。

  • 我想测试一个连接到Github api的应用程序,下载一些记录并对其进行处理。我想要一个模拟对象,我做了如下操作: 看起来不错吧?我应该在thenReturn中输入什么(它需要HttpResponse,但我不知道如何创建)。谢谢你的回答。如果你有更好的想法,我将不胜感激。 更新:字符串响应是一个示例响应

  • 我正在使用MEAN stack构建的SPA中实现fb身份验证。虽然我已经使用facebook token passport策略成功实现了fb身份验证,但我在保护APIendpoint方面遇到了问题。因为为此,我需要在$http服务中同时传递经过身份验证的用户对象和访问令牌,并且我已经尝试将访问令牌作为用户对象的属性和头属性传递,但仍然是401(未经授权的错误)。下面是我的代码片段。 护照留档显示“

  • 我已经安装了Apache 2.2负载平衡器和Weblogic 12c服务器。 我观察到一个https URL试图在我的应用程序中打开一个http URL,但没有成功,正如预期的那样。我搜索了一下为什么这会导致问题,并注意到了一些问题- http://geekexplains.blogspot.in/2008/06/https-becoming-http-in-case-of.html 当我试图寻找