【问题标题】:Microservice: Cross Service Validation and Decoupling?微服务:跨服务验证和解耦?
【发布时间】:2019-05-24 18:47:16
【问题描述】:

假设我有一个 Vehicle Service 和一个 Booking Service(使用经典的 Spring Boot、Eureka、Zuul 堆栈)。

当我想预订车辆时,如果我想验证车辆是否存在,有没有比从预订服务调用车辆服务更好的方法?

我希望应用程序保持解耦。

我在想我可以有一个 Facade 微服务来进行这项检查,但有没有更好的方法来做到这一点?

是否有任何验证模式可以确保解耦,还是我应该忘记验证此类数据?

谢谢

【问题讨论】:

    标签: spring-boot architecture apache-kafka microservices spring-cloud-netflix


    【解决方案1】:

    不,没有。您必须致电车辆服务以检查车辆是否存在。 这里没有技术解决方案。你有一个车辆服务,它知道处理预订的车辆和预订服务。但是您预订的资源需要由该资源的所有者进行验证。

    您可能会考虑在预订服务中缓存与车辆相关的信息,但我建议您不要这样做。

    但是,您可能有 biz 解决方案。 有些人会打电话给预订服务,并会在旁边传递车辆信息。 现在,您的车辆服务可以沿着两组字段共享车辆信息。 InventoryIssueTimestamp 和 InventoryExpiryTimestamp。你几乎说当有人预订时,我让他们有 n 分钟的库存。如果在 n 分钟内完成预订,您就可以了,否则您可以进行状态检查。

    您可能有类似的思考方式。但这些更可能是过度工程,除非您有一些非常具体的用例。进行验证调用主要是干净的。我试图解释这种情况的唯一原因是让您思考基于技术的解决方案。

    【讨论】:

    • 事实上,我正在寻找避免服务之间有太多交叉关系的最佳方法,比如避免以“意大利面盘”告终。
    • 对于微服务,你无法避免。每个服务都在做与其域相关的事情。但是对于横切关注点,您将不得不进行 api 调用(或任何开放的任何其他通信模式)。不利的一面是,如果没有正确完成,您将在左右和中间进行调用,但这归结为您如何管理外部 api 调用。这可能会将所有外部调用放在一个包下,尽可能多地卸载到队列中(因为它需要您的服务之外的依赖),但没有灵丹妙药。选择适合您的账单的技术或商业逻辑。
    猜你喜欢
    • 2019-07-29
    • 2019-03-21
    • 2017-03-10
    • 2017-10-06
    • 2018-07-28
    • 1970-01-01
    • 2015-07-24
    • 2019-02-17
    • 2015-09-03
    相关资源
    最近更新 更多