javascript - 在微服务之间共享代码——在这种情况下是否合理?

标签 javascript node.js microservices

有太多的答案和博客文章说“永远不要在微服务之间共享代码”,我现在想知道我应该如何遵循这个建议。我有以下微服务,它们中的每一个都通过 RabbitMQ 进行通信:

enter image description here

express server和两个不同的后台服务有完全不同的代码,而request workers只是多个实例。每个请求 worker 都应该处理一个请求,并在完成后返回一个直接回复 (RPC)。

我的问题:

我编写了一个类 ( RequestScheduler ),它提供了安排请求的方法(例如 getProfile: Promise<IProfile> )。既然我显然不允许在微服务之间共享代码,那么微服务之间的通信代码呢?

我看不出有什么方法可以避免在左侧与我的微服务共享该代码。

最佳答案

在我所见过的关于微服务架构的讨论中,横切关注点通常没有得到很好的记录——可能是因为乍一看它们似乎与概念相反(尽管事实并非如此)。在开发我们的应用程序(第一次使用微服务)时,我们遇到了与您所问类似的问题。在与一些比我们当时更有经验的人交谈后,我们开始意识到微服务的概念更多地是关于封装,因此在大小、库共享方面有硬性规定,等等都是次要的,微服务具有单一职责 (SRP) 并拥有一个单一的、定义明确的域 (DDD)。

我们有库(我们将其管理为 NuGet 包)用于将新服务连接到事件总线、管理授权、跨服务事件日志记录,甚至是用于错误处理的标准中间件 - 我们几乎共享这些我们所有的服务。

虽然我们没有对此定义硬性规则,但我想说我们将代码重用视为“如果我们生态系统中的所有微服务都需要它,它必须可以作为共享库使用。如果他们中的大多数人都可以使用它,它应该可以作为共享库使用。 每个微服务都可以选择是实现共享库还是推出自己的解决方案。”

只要您的共享代码以允许每个微服务独立管理其自身升级的方式分发,并且您的共享代码没有任何特定于领域的语言或顾虑,就一定要共享!

关于javascript - 在微服务之间共享代码——在这种情况下是否合理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47364834/

相关文章:

javascript - 如何在 spring boot 中将映射从本地存储传递到 Controller ?

javascript - 如何让NodeJS评估多个传统JS文件

javascript - 将任意 Javascript 数据对象传递给 Node.js C++ 插件

java - Vertx 中有应用程序变量吗?

javascript - 仅允许数字和减号

javascript - 单击链接时取消选中复选框

node.js - 在 docker 容器内安装 npm 时依赖项损坏

node.js - Dockering 具有外部依赖项的 nodejs 应用程序

java - Spring Java 微服务 war 规模过大

javascript - 如何在页面中插入HTMLCollection?