当前位置: 首页 > 知识库问答 >
问题:

我可以将java grpc用作库而不是框架吗?

陶飞鸿
2023-03-14

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

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

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

  • https://host/grpc -

(根据第一个答案进行编辑以提高清晰度)。。。

关键点-

我真的需要一个可以与之交互的java-gRPC api,以便我可以要求库双向编码/解码。然后,这为客户提供了在我们的公共API上执行gRPC或根据需要使用JSON的选项。

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

今天我确实花了很多时间开始创建新的io。grpc。ServerProvider和新io。grpc。ManagedChannelProvider但哇,有比我想象的更多的实现方法,因为我只需要对这些对象进行编码/解码,这就是我所寻找的。

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

webpieces实际上支持双向流,就像gRPC一样(http前端100%支持)。我们有一些工作要做,以将其驱动到控制器中,我们将在某个时间点(在这一点上,我们可以在我们设置的同一台无服务器服务器上为网页、gRPC和JSON提供服务器)。

优点:像旧的“java”playframework这样的Webpieces在开发时也支持热编译,因此如果我们可以在Webpieces下使用gRPC服务器,而不是将gRPC服务器置于顶部,从而消除我们正在进行的无重启开发,那将是非常理想的。

谢谢你的建议迪恩

共有1个答案

萧嘉禧
2023-03-14

我仍然认为gRPC更像一个图书馆。

无论如何,JSON博客文章将为您提供如何序列化和反序列化请求/响应的好方法。此外,它还向您展示了如何手动提供MethodDescriptor和ServerServiceDefinitions,以定义包括路由在内的方法和服务。

Protobuf是gRPC的默认序列化。因此,使用protobuf要容易得多。您通常不需要担心那些低级API。尽管如此,在核心部分,它并不像您在博客文章中看到的那样强烈依赖于特定的序列化。

 类似资料:
  • 我用的是spring 5.3.16,spring boot 2.2.10.RELEASE,spring cloud 2.2.10.RELEASE用的是spring-cloud-网飞-zuul,那么,我可以只升级spring版本到5.3.18,而不升级其他框架吗?

  • 问题内容: 我的模型包含一个枚举,它由JPA映射到我的mysql数据库上的一列。 mysql具有本机类型,使用起来会更方便。 如何配置JPA以使用这种类型? 问题答案: 没有对枚举AFAIK的内置支持,但是也许您可以尝试以下解决方法(我从未尝试过测试过): 您可以使用EnumType.STRING将值存储为String在数据库中。 但是使用本机ENUM要求您使用@Column批注定义columnD

  • 问题内容: 如何将Kibana与Apache solr集成在一起,而不是使用elasticsearch。 如果无法完成。 Kibana for Solr的替代品有哪些 问题答案: 在LucidWorks,我们已经移植了Kibana与Solr一起使用并将其作为开源发布。 如果需要捆绑的软件包,可以从http://www.lucidworks.com/lucidworks- silk/ 下载。 我们的

  • 在我当前的场景中,第三方将在我的数据库上动态创建表,并将表名存储为,列名存储为,存储在另一个表中,该表在我的NestJS后端定义为一个实体。 这样我就可以跟踪(和查询)这些表,因为我无法控制它的创建。 据我所知,TypeORMs需要在from子句中定义一个实体。 像这样的东西: 所以我想做一些类似的事情: 因此,传递表名时,我指向正确的表,但是TypeORM(和TS)会抱怨,因为是字符串,而不是实

  • 问题内容: 我正在调试我们的webapp。它被配置为在启动时创建一个DataSourceTransactionManager bean以及一个HibernateTransactionManager bean。这不是故意的,而是由第三方依赖引起的。效果似乎是良性的。我通过调试看到的是,当我们通过基于Hibernate的DAO持久化对象时,将调用DataSourceTransactionManager

  • 我可以用这个条件对象来wait/notify/notifyall和synchronized方法吗? 还是坚持带锁的组合更好? 此外: