【发布时间】:2018-05-02 01:37:41
【问题描述】:
有很多答案和博客文章说“永远不要在微服务之间共享代码”,我现在想知道我应该如何遵循这个建议。我有以下微服务,每个微服务都通过 RabbitMQ 进行通信:
express server 和两个不同的后台服务有完全不同的代码,而 request workers 只是多个实例。每个请求工作者都应该处理一个请求,并在完成后直接回复它 (RPC)。
我的问题:
我编写了一个类 (RequestScheduler),它提供了安排请求的方法(例如 getProfile: Promise<IProfile>)。既然我显然不允许在微服务之间共享代码,那么用于微服务之间通信的代码呢?
我没有办法避免与左侧的微服务共享该代码。
【问题讨论】:
-
能否更详细地描述您的问题,目前尚不清楚您要避免复制哪些代码。如果您的 2 个后台服务共享相同的代码,是否值得将其提取到单独的微服务中?
-
好吧,我试图避免帮助我在微服务之间进行通信的代码(例如,如上所述的调度请求),所以这不可能是它自己的微服务。需要有一点 RabbitMQ 的背景知识才能了解 RPC 需要什么,但我敢肯定,如果我使用 REST 进行通信,我会遇到同样的问题。
-
将该代码打包为一个模块
-
我在这里也会很粗鲁 - 根据意见投票结束这个问题是完全愚蠢的。为此我 +1
-
“不共享代码”的唯一合理含义是“不管理影响不同微服务的代码”。例如,如果微服务 A 和 B 在 v1 中使用 LibX,那么它完全可以。即使是必要的,现在没有库你怎么能开发任何东西?如果微服务 B 将 LibX 升级到 v2 则没问题,因为微服务 A 不必这样做。他们确实是独立的。所以将通用代码打包到一个库中,并确保一旦“发布”了库中的代码(在版本中)就不会改变。如果要更改库,请创建新版本。仅此而已。
标签: javascript node.js microservices