【发布时间】:2017-05-28 05:40:11
【问题描述】:
我们正在评估向微服务的转变。每个微服务都是自己独立开发的项目。在规划期间,我们已经确定一些微服务将通过 REST 调用、发布/订阅、消息传递与其他微服务进行通信(即订单服务需要来自产品服务的产品信息)。
如果一个微服务依赖于从另一个微服务中获取数据,那么在开发过程中如何隔离运行呢?例如,当您的订单服务请求产品详细信息但没有任何内容可以回答该请求时会发生什么?
【问题讨论】:
标签: microservices
我们正在评估向微服务的转变。每个微服务都是自己独立开发的项目。在规划期间,我们已经确定一些微服务将通过 REST 调用、发布/订阅、消息传递与其他微服务进行通信(即订单服务需要来自产品服务的产品信息)。
如果一个微服务依赖于从另一个微服务中获取数据,那么在开发过程中如何隔离运行呢?例如,当您的订单服务请求产品详细信息但没有任何内容可以回答该请求时会发生什么?
【问题讨论】:
标签: microservices
您可能需要的是存根休息服务。创建一个使用不属于公共 api 的路径获取预期输出的 webapp。当您调用公共 api 时,它会发送刚刚收到的内容
【讨论】:
如果一个微服务依赖于从另一个微服务中获取数据,那么它在开发过程中如何隔离运行?
在开发和生产过程中,它也应该始终与其他服务暂时隔离。
例如,当您的订单服务请求产品详细信息,但没有任何回应该请求时会发生什么?
这是一个设计缺陷暴露的地方:订单服务不应该向其他服务请求产品详细信息。产品详细信息应存储在将订阅订单服务的消息(事件)中。订单服务应该使用发布-订阅模式以异步方式获取此消息并将其保存在自己的数据库中。因此,有关产品的数据将存储在 2 个地方。
请考虑阅读this series of articles 了解有关微服务的更多详细信息。但简而言之:你的服务应该在时间上解耦,所以当你的产品服务宕机时——订单服务可以继续运行而不会中断。一般来说,这是理解良好分布式系统设计的关键。
【讨论】: