【问题标题】:How to start a gRPC server in plain text mode如何以纯文本模式启动 gRPC 服务器
【发布时间】:2022-01-15 00:17:22
【问题描述】:

我有一个带有 Docker 的微服务架构。 每个微服务既是服务器又是客户端。我正在尝试对它们实施交互式查询。我想用纯文本交流。

服务器代码:

Server server = ServerBuilder.forPort(6666)
        .addService((BindableService) this)
        .build();

server.start();

客户端代码:

    // Call the external instance
    final ManagedChannel channel = ManagedChannelBuilder
            .forAddress(hostStoreInfo.getHost(), hostStoreInfo.getPort())
            .usePlaintext()
            .build();
    final InteractiveQueryApiGrpc.InteractiveQueryApiBlockingStub stub = InteractiveQueryApiGrpc.newBlockingStub(channel);
    kafkaComplexMessage = stub.getOrder(request);
    channel.shutdown();

每个 Docker 容器都是这样启动的:

docker run -p 8080:6666 -p 7070:6666 --env SERVER_PORT=8080 --network mynetwork mymicroservice:latest

当在本地状态存储中找不到数据时,我尝试远程访问正确的状态存储。但是,我收到此错误消息:

io.grpc.StatusRuntimeException: INTERNAL: http2 exception
(...)
Caused by: io.grpc.netty.shaded.io.netty.handler.codec.http2.Http2Exception: First received frame was not SETTINGS. Hex dump for first 5 bytes: 485454502f

当然,每个容器都有不同的端口,但我记录了所有内容并调用了正确的 IP 和端口。我的印象是服务器以纯文本形式运行 TSL 和客户端,我不确定如何降级服务器/禁用安全性。

【问题讨论】:

    标签: spring-boot grpc grpc-java


    【解决方案1】:

    由于我对 Docker 缺乏经验,我实际上调用了正确的 IP,但使用了错误的端口。

    我认为docker run -p 8080:6666 (...) 将允许 Docker 容器向其他 Docker 容器公开端口,但事实并非如此。这仅用于向主机公开端口。

    对于想要实现 Kafka 交互查询的 Spring Boot 用户:

    你可以像这样获取 docker 容器的 IP:

    @Value("${spring.cloud.client.ip-address}")
    

    而端口只是服务器启动时使用的端口:

    Server server = ServerBuilder.forPort(grpcServerPort)
        .addService((BindableService) this)
        .build();
    

    【讨论】:

      【解决方案2】:

      您可能在客户端和服务器之间有一个 HTTP/1 代理。

      查看该错误消息:

      前 5 个字节的十六进制转储:485454502f

      0x485454502f 是 ASCII 格式的“HTTP/”。所以客户端正在与 HTTP/1 服务器通信。 gRPC 明文假定 HTTP/2(HTTP/2 规范中的“使用先验知识启动 HTTP/2”)并且不执行 HTTP/1→HTTP/2 升级。

      最简单的解决方案是,如果代理支持具有先验知识的 HTTP/2,则只需对其进行配置。如果没有,您可能需要切换到 TCP 代理模式,或者切换到另一个代理。

      【讨论】:

        猜你喜欢
        • 2021-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-12
        • 2021-10-03
        • 2013-01-24
        • 1970-01-01
        • 2016-10-09
        相关资源
        最近更新 更多