首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何以纯文本模式启动gRPC服务器

如何以纯文本模式启动gRPC服务器
EN

Stack Overflow用户
提问于 2021-12-10 09:22:48
回答 2查看 1.2K关注 0票数 0

我和Docker有一个微服务架构。每个微服务都是一个服务器和一个客户端。我正在尝试在它们上实现交互式查询。我想用纯文本进行交流。

服务器代码:

代码语言:javascript
运行
复制
Server server = ServerBuilder.forPort(6666)
        .addService((BindableService) this)
        .build();

server.start();

客户代码:

代码语言:javascript
运行
复制
    // 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();

每个码头集装箱都是这样启动的:

代码语言:javascript
运行
复制
docker run -p 8080:6666 -p 7070:6666 --env SERVER_PORT=8080 --network mynetwork mymicroservice:latest

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

代码语言:javascript
运行
复制
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和client运行,在我的情况下,我不知道如何降低服务器的级别/禁用安全性。

EN

回答 2

Stack Overflow用户

发布于 2021-12-10 19:16:11

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

看看这条错误消息:

头5个字节的

十六进制转储: 485454502f

0x485454502f是ASCII中的"HTTP/“。因此,客户端正在与HTTP/1服务器对话。gRPC明文假定HTTP/2 (“从HTTP/2规范开始HTTP/2”),不进行HTTP/1→HTTP/2升级。

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

票数 0
EN

Stack Overflow用户

发布于 2021-12-13 10:52:49

实际上,我是在调用正确的IP,但由于我在码头的经验不足,端口错了。

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

对于希望实现Kafka Interactve查询的Spring用户:

您可以获得码头集装箱的IP如下所示:

代码语言:javascript
运行
复制
@Value("${spring.cloud.client.ip-address}")

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

代码语言:javascript
运行
复制
Server server = ServerBuilder.forPort(grpcServerPort)
    .addService((BindableService) this)
    .build();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70302242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档