【问题标题】:Two way communication for Restful Microservices, Is it reasonable for notification?Restful微服务的两种通信方式,通知是否合理?
【发布时间】:2017-06-09 08:41:44
【问题描述】:

许多书籍和文章指出,微服务中的循环通常很糟糕,因为它们引入了相互依赖,结果导致更大的依赖、版本控制和部署问题需要解决。

但是,假设有服务A,调用服务B,也假设由于这个调用会启动冗长的计算,所以我们不应该让这个调用同步。一个可能的解决方案是服务 A 将资源 url 传递给服务 B,以便当 B 计算结果时,它应该将结果发布到给定的 url 遵循宁静的范式。所以这个最终资源就像某种回调。这种方法确实可以解决我的问题,但是如上一段所述,它引入了循环依赖。这个可以吗?如果不是,您将如何解决同样的问题?

【问题讨论】:

    标签: rest architecture microservices


    【解决方案1】:

    它还可以,但不是一个好的设计,因为您可以看到依赖项是相当硬编码的。

    您可以选择使用消息传递,将请求消息放在一个队列中,将响应消息放在另一个队列中。

    通过这种方式,您的通信将是异步的、松散耦合的,并且任何服务都不需要非常具体地了解彼此及其位置/地址。 这也是 Reactive Manifesto 推荐的沟通方式。

    【讨论】:

    • 对于这种情况,使用两个队列听起来有点矫枉过正。在问题注释中,只有 A 知道 B 的地址。所以这不是一个大问题。此外,您的解决方案队列必须知道这些地址,除非服务本身进行轮询(这是我想避免的)。没有那么确信...
    • 队列的发送者和接收者只需要知道队列的名称。在队列的侦听端,消息接收者不需要轮询,它最初是基于事件的,虽然你可以做轮询机制,但这不是本意。所以没有人会知道或不需要知道发送方或接收方位置的任何地址;但只有队列名称和消息服务器的位置,例如 JMS 实现服务器。
    猜你喜欢
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 2019-05-29
    • 2018-05-07
    相关资源
    最近更新 更多