我正在使用 GRPC 服务器测试 Azure Spring Cloud。GRPC 的要求之一是使用 HTTP/2 进行通信。
Azure Spring Cloud 是否适用于 HTTP2?
我尝试了以下场景:
1.) 通过将 WebApplicationType 设置为 None 并将 server.port 映射到 grpc.port 来关闭 Springboot 的内部 tomcat。此设置在本地工作,但是当我在 Azure Spring Cloud 中部署时,客户端使用 https 连接到服务端点。当它到达 GRPC 服务器(应用程序)时,它会降级为 HTTP/1。服务器有很多 PROTOCOL_ERROR 问题,因为连接是 http/1,而 GRPC 服务器期望它是 http/2。
2.) 使用 Spring Cloud Gateway 并在内部将流量重定向到 GRPC Server。为了在 Spring Cloud Gateway 上使用 http2,我在 GRPC 服务器和网关上启用了证书。当客户端连接到服务应用程序(具有 GRPC 服务器的网关)时,当它到达网关时,会出现一些 NotSSLRecordException。这在本地有效,但是当它部署到 Azure Spring Cloud 时它不起作用。可能是因为 Azure Spring Cloud 应用程序服务端点在重定向到应用程序服务(具有 GRPC 服务器的网关实例)时使用自己的证书对其进行包装,因此连接不再是非 ssl/tls。由于 NotSSLRecordException 问题,网关无法处理请求。