看过前面几篇文章的同学是否也在尝试将Jdk升级到Java11呢?今天笔者要讲解的是微服务内部升级到 HTTP/2.0 协议。
http2优势想必大家都知晓,在这不做过多的介绍。说起 HTTP/2.0 大家所熟知的应该是 Over TLS
版,现有支持HTTP/2.0的浏览器都是实现的 Over TLS
版,
今天带领大家了解 HTTP/2.0 的另一个版本 HTTP/2.0 Clear Text
。
HTTP/2.0 Cleartext
,简称 h2c
(后文将使用这个简称)。使用101 改变协议协商升级为 HTTP2
协议,采用 http2
不做加密,非常适合微服务内部
的请求。
享受 http2
的多路复用,降低 tls
对服务器 cpu
的压力(加解密非常费 CPU),而且微服务内部 tls
也增加了证书的维护成本。
Spring boot 容器笔者使用的是 Undertow
,网关使用的 Spring cloud gateway
,今天我们主要讲解这2个组件的升级到 h2c
。
google 翻译一下:支持HTTP升级,以允许通过HTTP端口多路复用多个协议。
/** * Undertow http2 h2c 配置 * * @author L.cm */ @Configuration @ConditionalOnClass(Undertow.class) @AutoConfigureBefore(ServletWebServerFactoryAutoConfiguration.class) public class UndertowHttp2Configuration { @Bean public ServletWebServerFactory servletWebServerFactory() { UndertowServletWebServerFactory factory = new UndertowServletWebServerFactory(); // 开启 undertow http2 factory.addBuilderCustomizers(builder -> builder.setServerOption(ENABLE_HTTP2, true)); return factory; } } 复制代码
spring cloud gateway
server 也是支持 h2c
的配置比较容易,只需开启配置即可,具体逻辑可以查看下图源码。
server: ssl: enabled: false http2: enabled: true 复制代码
上文介绍了服务端如何开启 h2c
,但是是否开启成功只有测试过才知道。
最简单的方法就是基于 java11
的 HttpClient
来测试一番。
public static void main(String[] args) throws IOException, InterruptedException { HttpClient client = HttpClient.newBuilder().build(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("http://localhost:8081")) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.version()); // HTTP_2 System.out.println(response.body()); // test } 复制代码
看到这里大家是不是跃跃欲试。当然,很多事情也不是那么一帆风顺。后面的一篇文章将会继续帮助大家趟坑。
等等好像有什么不对,我们的专栏不是 java11
么?怎么变成了 h2c
?
别着急后面一篇文章将为大家解密,喜欢我们的文章的朋友记得关注我们。
本系列文章由微服务核心组件mica作者如梦技术整理撰写, 如有参考或者转载,请保留原作者和注明出处。