如何在一个模块 (A) 中创建一个 class 来实现另一个模块 (B) 的抽象 class

How to create a class in one module(A) that implements an abstract class from another module(B)

我使用 Microservices 架构和 Spring-cloud 堆栈。

对于服务之间的通信,我决定使用 gRPC

我有一个名为 Accounting 的服务,今天我实现了一个 gRPC-interface 项目并将其添加到 Git 存储库。

我使用 Git-submodules 使用以下命令将 gRPC-interface 添加到 Accounting 服务:

git submodule add -b master <Git-Repo-URL>

git submodule init

现在我想在 Accounting 中创建一个服务 class,implements 来自 gRPC-interface 的一个 class,但它不识别任何 class 来自 gRPC-interface 模块!!

我想我需要对Accounting模块中的setting.gradlebuild.gradle文件做一些修改,但我不知道我应该做哪些修改甚至不做知道在互联网上寻找什么主题。

任何帮助或线索将不胜感激!!

听起来您对这里的微服务有些不知所措,但是,为了回答上述问题:

思考'twitter API'。 Twitter 有 2 'projects'(不是在 git 子模块意义上,在英文单词意义上)。有 twitter-the-website,这是运行它的 non-public 代码,特别是包括当您连接到 api.twitter.com 时响应的代码。但还有一个开源(或至少 public 可用)库,您可以将其包含在 java 项目中,让您可以 talk 推特 API。此 public API 包含与 twitterverse 中的概念匹配的模型 类(例如 'a tweet'、'a user'、'a direct message'、'the concept of one user deciding to follow another'等),以及您使用参数调用的函数(大概在 'api' 对象上)以及这些模型的 returns 个实例 类.

你需要做同样的事情。一个微服务由两个项目组成:它的 API, 另一个微服务 本身包含它,类似于 twitter 提供的 public 'java API' 库,和实际代码。这可能是一个项目或一百万个项目,微服务的一个重要部分是:从依赖于微服务 B 的微服务 A 的角度来看,除了描述的部分之外,您根本不需要了解 B它 public API。就服务 A 而言,其他一切都是无关紧要的实现细节。

如果您将一个微服务的所有代码都包含在另一个微服务中,那么您最终会得到每个 'microservice' 都包含所有其他微服务的所有代码,并且您的服务不再是微服务。

是的,这很烦人。您并不完全需要复制代码(定义模型的 'public API' 部分也可以是微服务本身的依赖项),但是每个微服务都会变成维护 2 个独立的代码,您需要找到一种方法来'public API' 部分可以像推特 API 一样进行分发。你可能不想把它放在 Maven Central 上,但这就是为什么 Maven(sonatype,真的),gradle,等等都提供了一个 company-wide 中间依赖服务器的概念——一个可以托管你的'public API' 个项目。除了本地依赖项 - 阅读构建系统的文档,了解如何处理 non-open-source-publicized(即不在 Maven 中央)依赖项。