我在执行REST微服务架构方面有一些经验,但是现在我想开始在事件驱动架构中使用kafka作为消息提供程序。
我在理解微服务之间的通信方式时遇到问题。
让我们说我有两个微服务,一个用于处理用户,另一个用于处理用户之间的消息。
可以创建用户,然后用户可以向其他用户发送消息,并且我打算针对他们进行主题处理,然后将其存储在MongoDB中。
如何在事件驱动的体系结构中检索此消息?
编辑:该示例非常简单,仅出于教育目的,并使用Apache-Kafka进行实践。
答案 0 :(得分:0)
为清楚起见,我们将用户消息称为帖子。
一种可能的体系结构是所有用户创建发布对象,这些对象被发送到包含诸如时间戳,发件人和发件人之类的信息的Kafka主题,而不是直接作为数据库插入对象。
在Kafka之外,您编写了一些消费者流程来轮询该主题中的所有消息,然后插入到Mongo(可能还包括搜索引擎或机器学习/文本分类模型)。
在另一个用户帐户上,他们(周期性地)在数据库中查询发送给他们的所有帖子,因为Kafka无法通过用户帐户建立索引,并且每个用户一个主题都不是可扩展的设计模式。
要点是用户不是直接从Kafka检索帖子,而是将消息缓存在Kafka中,以便可以将它们分叉为不同的模型,以便您可以将应用程序与Mongo依赖项分离(除了进行搜索外)功能)
从事件中,您可以将“新帖子”,“编辑帖子”和“删除帖子”分离为单独的主题。有关设计此内容的更多信息,您可以查看事件风暴