【问题标题】:Java docker with jar load main带有 jar 加载 main 的 Java docker
【发布时间】:2019-11-05 02:36:38
【问题描述】:

在 Java 中运行基于 gRPC 的 Java 客户端服务器应用程序。我能够为服务器生成存根,但是当涉及到服务内通信时,我无法为恰好是在wildfly中运行的war文件的客户端应用程序生成存根。这是概述。

  1. 服务器 -> 产品(在容器中运行的 Jar)

  2. 客户端 -> 在 Wildfly 上运行的 War 文件

客户端正在公开一个休息端点,该端点依次调用服务器。

我的理解是我应该在 1 和 2 之间共享 proto 文件。下面的 proto 被复制到 src/main/proto 下的 1 和 2

service ProductService {
    rpc findAll(google.protobuf.Empty) returns (Product);
}

message Product {
    string id = 1;
    string name = 2;
}

问题。我对在两个隔离的应用程序之间共享协议文件然后通过生成的存根在两者之间进行通信的理解是否正确。

【问题讨论】:

    标签: java maven grpc


    【解决方案1】:

    分享.proto 很好。您还可以将生成的代码放入客户端和服务器共享的库中。您还可以将.proto 放入客户端和服务器构建过程都使用的共享位置(如存储库)。

    复制原型很容易并且有效。您只是想确保您知道原型的“规范”版本是什么;您想知道应该首先更新哪个版本,以便了解最新版本的 proto。您不希望客户端维护人员和服务器维护人员都对 proto 进行更改,然后需要弄清楚如何合并更改。

    【讨论】:

    • 我理解这种方法,它在docker 和docker-compose 的容器化环境中如何工作,工作流程是什么?我正在努力思考如何与客户端和服务器容器共享动态生成的库。
    • 我对您的 docker 设置了解不足,无法回复。您只是在主题中说了一次“docker”,但没有再提及。复制 .protos 不需要 docker。大多数客户端/服务器构建都可以通过 Maven 存储库或类似存储库共享工件。更具体的答案会根据您构建的时间和方式而发生很大变化。
    • 是的,因为我从来没有这样做过,我对 grpc 和 docker 都是新手,所以你的意思是说我应该创建一个单独的模块,将 proto 文件放入其中,生成存根,发布到 Maven 存储库。然后客户端/服务器链接到这个 repo,这是工作流程吗?
    • 您可以创建一个单独的工件并将其发布到 maven 存储库,并让客户端和服务器都使用相同的工件。这是可能的工作流程中的一个。
    猜你喜欢
    • 2012-07-01
    • 2013-11-06
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 2015-05-07
    相关资源
    最近更新 更多