【问题标题】:Getting information from a microservice in a event drivent architecture从事件驱动架构中的微服务获取信息
【发布时间】:2020-04-18 14:00:22
【问题描述】:

我有一些做 REST 微服务架构的经验,但现在我想在我的事件驱动架构中开始使用 kafka 作为消息提供者。

我在理解微服务之间的通信如何工作时遇到了问题。

假设我有两个微服务,一个处理用户,另一个处理用户之间的消息。

可以创建用户,然后用户可以向其他用户发送消息,我打算用主题来处理它们,然后将它们存储在 MongoDB 中。

如何在事件驱动架构中检索此消息?

编辑:这个例子很简单,只是为了教育目的和使用 Apache-Kafka 练习。

【问题讨论】:

    标签: events apache-kafka microservices event-driven


    【解决方案1】:

    为清楚起见,我们将用户消息称为帖子。

    一种可能的架构是所有用户都创建帖子对象,这些帖子对象被发送到包含时间戳、发送者和发送者等信息的 Kafka 主题,而不是直接作为数据库插入。

    在 Kafka 之外,您编写一些消费者进程来轮询来自主题的所有消息,然后插入到 Mongo(可能还有搜索引擎或机器学习/文本分类模型)。

    在另一个用户帐户上,他们(定期)查询数据库以获取发送给他们的所有帖子,因为 Kafka 不能由用户帐户索引,并且每个用户一个主题不是可扩展的设计模式。

    要点是用户不是直接从 Kafka 检索帖子,但是您已经在 Kafka 中缓冲了消息,因此可以将它们分叉成不同的模型,这样您就可以将您的应用程序与 Mongo 依赖项解耦(除了搜索功能)

    您可以从事件中分离出“posts-new”、“posts-edit”和“posts-deletes”作为单独的主题。有关设计此功能的更多背景信息,您可以查看 Event Storming

    【讨论】:

    • 感谢您的澄清。现在我的想法是有一个与用户通信的 API。例如创建用户和发送消息。发送消息时,在创建事件之前识别用户在数据库中的过程将如何?你做一个嵌套事件吗?
    • 当然,您可以将 Kafka 生产者放在 REST API 后面。如果我理解这个问题,您可能需要一个基于单独登录事件的会话令牌,然后才能发送任何消息。登录流程负责用户的存在,而不是消息传递流程
    猜你喜欢
    • 2019-06-18
    • 2021-02-03
    • 2017-09-03
    • 2018-05-13
    • 2018-06-25
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多