「是时候升级java11了」HTTP/2.0 协议

专栏目录

  1. 是时候升级java11了-01-jdk11优势和jdk选择
  2. 是时候升级java11了-02-升级jdk11踩坑记
  3. 是时候升级java11了-03虚拟机Jvm参数设置
  4. 是时候升级java11了-04微服务内http2通信之http2 Clear Text(h2c)
  5. 是时候升级java11了-05微服务内h2c通信的阻碍和问题解决

前言

看过前面几篇文章的同学是否也在尝试将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 Clear Text

HTTP/2.0 Cleartext,简称 h2c(后文将使用这个简称)。使用101 改变协议协商升级为 HTTP2 协议,采用 http2 不做加密,非常适合微服务内部的请求。 享受 http2 的多路复用,降低 tls 对服务器 cpu 的压力(加解密非常费 CPU),而且微服务内部 tls 也增加了证书的维护成本。

升级 h2c

Spring boot 容器笔者使用的是 Undertow,网关使用的 Spring cloud gateway,今天我们主要讲解这2个组件的升级到 h2c

  1. Undertow 升级到 h2c 打开 Undertow 官网:undertow.io,我们可以看到首页上有这也一个说明:

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;
	}

}
复制代码
  1. spring cloud gateway 升级到 h2c spring cloud gateway server 也是支持 h2c 的配置比较容易,只需开启配置即可,具体逻辑可以查看下图源码。
server:
  ssl:
    enabled: false
  http2:
    enabled: true
复制代码

测试 h2c

上文介绍了服务端如何开启 h2c,但是是否开启成功只有测试过才知道。 最简单的方法就是基于 java11HttpClient 来测试一番。

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作者如梦技术整理撰写, 如有参考或者转载,请保留原作者和注明出处。

猜你喜欢

转载自juejin.im/post/5e64540ef265da5735505f6e