java - 我可以使用 java-grpc 作为库而不是框架吗?

标签 java json grpc grpc-java

我非常相信组合优于继承,以及库优于框架(这与组合非常相似,因为库是组合的)。 gRPC java 示例中的这段代码在某种程度上告诉我 java-grpc 除了只是一个库之外还是一个框架(这很好,没有什么问题)...

    Server server = ServerBuilder.forPort(port)
            .addService(new GreeterImpl())
            .build()
            .start();

我正在尝试让我的网络服务器(webpieces)接收这些网址上的请求

  • https://host/grpc -> webpieces 只会重用 grpc 库(希望如此)进行编码/解码
  • https://host/json/ {grpcMethod} -> webpieces 会获取 grpcMethod 并将 json 解码为 grpc 对象以调用此处的服务

(根据第一个答案进行编辑以更加清晰)...

关键点 -> Json 应该进来并使用相同的 protobuf 对象。我不必创建 json pojo,如 json grpc 吹哨文章 JSON grpc 中所示。

我确实需要一个可以与之交互的 java-gRPC api,这样我就可以要求库进行双向编码/解码。然后,客户可以选择在我们的公共(public) API 上执行 gRPC,或者根据需要使用 JSON。

我开始思考java-grpc,这是不可能的,因为它是一个框架而不仅仅是一个库(我的意思是它当然也是一个库,但因为我必须插入它而不是使用它,所以它是也是一个框架)。

我今天确实花了很多时间开始创建一个新的 io.grpc.ServerProvider 和一个新的 io.grpc.ManagedChannelProvider 但是哇,要实现的东西比我想象的简单编码/解码要多得多这些对我来说正是我一直在寻找的东西。

还有最后一个问题,因为 gRPC 是通过 http/2 实现的。我在 java-grpc 的客户端或服务器中没有看到可以提供应该点击的 url 路径的位置?

webpieces 实际上在一定程度上支持像 gRPC 一样的双向流(http 前端 100% 支持)。我们需要做一些工作来将其驱动到 Controller 中,我们将在某个时候执行这些操作(此时,我们可以在我们设置的同一个无服务器服务器上提供网页、gRPC 和 JSON 服务)。

奖励积分:像旧的“java”playframework这样的Webpieces在开发时也支持热编译,因此如果我们可以将gRPC服务器放在webpieces下而不是gRPC服务器放在顶部,那就太理想了,这样就可以消除无需重新启动的开发我们还在继续。

感谢您的任何提示! 院长

最佳答案

我仍然认为 gRPC 更像是一个库。

无论如何,the JSON blog post将使您很好地了解如何序列化和反序列化请求/响应。此外,它还向您展示了如何手动提供 MethodDescriptors 和 ServerServiceDefinitions 来定义方法和服务(包括路由)。

Protobuf 是 gRPC 的默认序列化。所以,使用protobuf要容易得多。您通常不需要担心那些低级 API。尽管如此,从本质上讲,它并不强烈依赖于特定的序列化,正如您从博客文章中看到的那样。

关于java - 我可以使用 java-grpc 作为库而不是框架吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61470816/

相关文章:

java - 如何在mongodb中动态添加现有嵌套文档中的文档

java - 如何在 Java 中比较字符串?

java - 检查 json 是否包含字符串值

rest - gRPC(HTTP/2) 是否比使用 HTTP/2 的 REST 更快?

c++ - 如何解决 gRPC 生成文件中的编译错误?

go - makefile 中的 protoc 以构建 protobuf

java - 为什么 spring 不使用我的构造函数来初始化这个 bean(Map 参数)

java - 正则表达式:匹配任何非单词和非数字字符,除了

javascript - json_encode unicode转义序列无法在javascript中显示

javascript - html 下拉菜单依赖于 json 数据