如何在两个微服务之间共享 REST 服务实体?

2024-03-30

我使用 java 创建了两个微服务。我需要从服务 A 到服务 B 进行 REST api 调用。发送的数据将采用 JSON 格式。使用 jax-rs 我需要在这两个服务中创建实体类。

由于两个项目中的实体类相同。我可以吗

  • 创建一个通用 jar 并用于我的所有实体/域对象?这会让我的微服务耦合更紧密吗?
  • 我是否在两个微服务项目中创建相同的类?这仅仅意味着在两个项目中重复工作吗?

服务之间是否有更好的通信方式?


至于让两个微服务独立以及将来它们也独立,我也会复制代码。我们之前也遇到过完全相同的情况。几个微服务似乎使用一些“通用”类,可以将它们放入单独的 jar 中。 最终我们出现了以下情况:

  • 使用相同 JAR 的多个 (5+) 服务
  • 事实证明,我们认为相同的类在不同的服务中似乎具有稍微不同的语义
  • 在发布时,其中一个类的更改或多或少迫使我们对每个微服务进行发布(这里不再具有独立性)
  • 开发人员往往会在任何地方看到“常见”行为,因此您很可能最终会得到一些“帮助器/实用程序”类,同时这在 OOP 中被认为是代码味道

长话短说,与此同时,我们转而复制代码,这使我们能够自由地真正独立地处理我们的微服务,因为我们只需要遵守服务合同。内部发生的事情完全取决于服务,我们不必在迭代结束时发布所有服务。我并不是说另一个选择是错误的,但事实证明它不适合我们。如果您确实看到两个服务之间的公共类,并且您确信您的公共库不会与其他垃圾混淆,那么您就可以保存了。

EDIT

也许作为后续,我们对在一些公共类中共享测试代码的测试(单元和集成)进行了相同的讨论。最后,这简直就是地狱,因为代码或验收标准的每一个微小变化都会导致 50% 的测试失败。同时,我们的策略是不在测试级别共享任何内容,并在测试地点确保一切正常。这样您就可以非常快地消除或更改测试。最后,我们得到的教训是保持业务代码尽可能干净和优雅,并以尽可能少让我们头疼的方式保持测试代码。

Edit2同时,我们使用开放 API 规范定义所有 REST 接口,并创建通过 maven 插件 openapi-generator 交换的实际 DTO 对象。该规范驻留在实现该接口的项目中,并将其发布到artifactory。实现客户端的项目会提取它并基于它创建 DTO。这样,您就拥有了单点事实,无需编写 DTO 样板代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在两个微服务之间共享 REST 服务实体? 的相关文章

随机推荐

  • C# 3.5 DLR 表达式.动态问题

    我继承了一种小型脚本语言 并尝试将其移植到 DLR 以便更容易管理 到目前为止 一切都相当简单 我在尝试动态调用变量的成员时遇到了问题 当前的语言在 NET 上运行 并使用解析循环和反射来执行此操作 但我希望摆脱这种情况 这是脚本语言的示例
  • 在PE的导入表中添加一个条目

    我正在寻找一个命令行程序来向 PE 文件的导入表添加条目 我的目标是将一个新的导入函数从外部 DLL 添加到我的 EXE 然后使用 ollydbg 使用代码洞穴插入新代码 新代码将使用新导入的函数 实际上我已经实现了我的目标 但是要向我使用
  • 使用 LINQWhere 查询仅获取部分 ConfigurationManager.ConnectionStrings

    我的目标是使用 LINQWhere查询于ConfigurationManager ConnectionStrings控制台应用程序中的集合 假设一个新的 NET 4 5 控制台应用程序添加了 System Configuration 引用
  • 一个构造函数 - 多个参数

    我在一些 Java 编程竞赛中找到了一个任务 必须创建仅包含一个参数 文本 和一个构造函数的类 Sentence 这是示例测试代码 Sentence s1 new Sentence only CAT s2 new Sentence and
  • 用户“”登录失败

    我有一个 ASP Net MVC 网站 在本地测试时工作正常 我已将该网站放入您的 Windows Server 2008 计算机上的 IIS 7 中 该网站使用 net 会员提供商 当我尝试登录时收到以下错误 Login failed f
  • 使用python限制类实例的数量

    我的主类创建了一个简单的QmainWindows像这样 class mcManageUiC QtGui QMainWindow def init self super mcManageUiC self init self initUI de
  • 使用 perl 格式化字符串和日期

    我想转换 使用perl 05 26 2013 06 09 47 to 26 05 2013 06 09 47 另外我怎样才能将上面的日期和时间更改为 GMT 日期和时间 use DateTime Format Strptime qw my
  • 用户查找加密数据库字段

    本质上 我有一个保存用户数据的表 所有这些数据都是 AES 加密的 在 BLOB 字段中 这意味着这些字段都不能被索引 这将减慢该表上的任何查询 特别是因为在进行任何匹配之前整个表需要解密 WHERE AES DECRYPT user em
  • 从树视图 tkinter 复制项目

    我的一个 tkinter 应用程序中有一个树视图 我想知道是否真的可以通过用户右键单击来复制选定的字段 如果没有 是否有任何其他小部件允许用户复制 GUI 窗口中显示的选定字段 Code log Toplevel root log titl
  • javascript向函数添加属性

    假设我们有一个函数 function Rabbit console log shiv 现在 无需创建该函数的对象 我就可以分配该对象的属性 Rabbit bark function line console log name is line
  • 使用 Iso_Fortran_Env 设置函数的 Kind 值

    如何使用 ISO Fortran Env 的内在函数以 Fortran 2008 惯用的方式设置函数的返回 KIND 值 通常在主程序中 我可以使用 ISO Fortran 内在函数 如下所示 program name here use i
  • jQuery 事件适用于 Firefox,不适用于 Chrome

    我在代码中注册了一些点击事件 它们在 Firefox Windows 和 Mac 中正常运行 但在 Chrome 中无法执行 尝试过 Windows 和 Mac beta JavaScript 的目的是根据 select 元素的值显示正确的
  • 检查一个 Int 值是否大于或等于另一个 Int 值?价值? [复制]

    这个问题在这里已经有答案了 如何比较两个 Int 值 所以 我有这个 let limit Int let current Int Int self stringValue 但是当我尝试比较它们 大于或等于 时 if current gt s
  • 如何使 JAWS 等屏幕阅读器可以访问“正在加载”图标?

    所以 HTML 代码是这样的 div style display none img src PT LOADING gif alt Processing please wait title div 即使提供了 ALT 文本 在更改样式以显示图
  • 函数 while 循环中的 return 是如何处理的?

    我有一个函数 该函数内部有一个 while 循环 当我尝试使用 IF 语句在 while 循环内设置非局部变量 然后退出整个函数时 突然该变量不再设置 function EXAMPLE cat test txt while read LIN
  • insertRow 与appendChild

    向表中添加行时首选哪种方法 var tr tbl insertRow 1 or var tr document createElement tr tbl appendChild tr insertRow会好得多 这是支持的 http www
  • 为什么此 GeoTool 片段不生成可查看的 shapefile?

    我正在创建一个简单的程序 它从 csv 文件读取值并根据这些值创建 shp 文件 这是一个轻微的修改这个例子 http docs geotools org latest tutorials feature csv2shp html 形状文件
  • JUL 适配器不适用于 Jersey

    我正在尝试使用七月适配器将 Java Util Logging 委托给 Log4j2 更准确地说 任何使用 JUL 生成日志的第三方库都应该委托给 Log4j2 作为一个简单的练习 我创建了一个使用库的独立应用程序 我创建这个库是为了测试目
  • Steam API 所有游戏

    我一直在阅读论坛并尝试 Steam API 我正在寻找提供所有 Steam 游戏的 API 我发现提供所有 SteamApp 的 API 以及提供应用程序信息的 Steam 商店 API 我正在寻找类型 游戏 但为此 我需要为每个 Stea
  • 如何在两个微服务之间共享 REST 服务实体?

    我使用 java 创建了两个微服务 我需要从服务 A 到服务 B 进行 REST api 调用 发送的数据将采用 JSON 格式 使用 jax rs 我需要在这两个服务中创建实体类 由于两个项目中的实体类相同 我可以吗 创建一个通用 jar