代码之家  ›  专栏  ›  技术社区  ›  J4N

服务应该在微服务体系结构中具有“事件”吗?

  •  0
  • J4N  · 技术社区  · 7 年前

    我在寻找一些最佳实践: 在我们的应用程序中,我们有很多服务,它们之间有很多交互。

    一些服务需要能够通知他们的终端已经发生了变化。 我们直观的开发人员方法是只在其中一个事件中注册。但我觉得这有点“肮脏”。

    我的服务是“提供”给请求它的人的,是的,但是我们不应该知道服务的生命周期(也不应该因为有人仍然注册而阻止服务的服务垃圾收集)。

    我的选择是:

    • 向服务请求一个对象,我将在该对象上注册事件-->我觉得这不太干净
    • 向服务提供实现回调接口的对象,并让服务调用回调而不是通知事件。
    • ????

    你认为这方面的最佳实践是什么?最干净的方法是什么?

    2 回复  |  直到 7 年前
        1
  •  0
  •   skjagini    7 年前

    有一个已知的模式,cqrs(命令查询责任分离),您可以找到许多关于如何通过事件实现它的例子,称为eventsourcing。您不需要使用eventsourcing,您只需发布到队列并订阅返回以处理请求,您还可以轻松地扩展架构。

    在C中,有一个事件源框架, https://github.com/gautema/CQRSlite 还有一个关于如何使用sacha的很好的解释, https://www.codeproject.com/articles/991648/cqrs-a-cross-examination-of-how-it-works 你也可以在这里找到更多的细节, https://www.youtube.com/watch?v=t2AI9hODJ2E&t=1247s

    事件寻源变得不那么复杂,除非你真的需要它,马丁·福勒几乎没有关于事件寻源的利弊的好文章, https://martinfowler.com/eaaDev/EventSourcing.html

        2
  •  0
  •   Kaidul    7 年前

    我们做了什么 Careem 我们的微服务系统架构 事件 它位于亚马逊的SQS之上。任何服务都可以是此服务的发布者或订阅者。当任何服务使用我们的事件发布者SDK API发布事件时,该事件将被放入Amazon SQS中。然后事件处理器SDK检查订阅服务器列表中存储在dynamodb中的特定类型的事件。对于每个订阅服务器,都有一个单独的队列(sqs),事件处理器将事件从sqs中取出,并将其放入每个订阅服务器的队列中。然后,事件使用者SDK从队列中峰值化该事件,并推动关联服务。整个过程是异步的,这意味着发布服务器和订阅服务器服务不必等待任何响应或确认。

    无论您是否希望将其视为专用服务,您都需要事件来处理异步任务。