使用事件消息刷新微服务数据

问题描述

我正在开发一种微服务架构,其中我们添加了基于事件的更新,例如

  1. 用户更新UI中的域对象
  2. UI将消息更新发送到管理该域对象的微服务A。
  3. 微服务A将发布有关Kafka主题的更新消息。该消息将是更新的域对象的ID,以及操作(例如, PUT / POST / DELETE。
  4. 消费者微服务B,C等将侦听此主题,然后必须使用ID调用适当的域对象终结点来检索更新的数据。

我想知道如何解决该问题的步骤4。我们正计划在Kafka消息中放入一个枚举,以标识已更新的对象类型,因为微服务A处理了几种类似类型的域对象,被更新。消费者将根据此类型调用适当的端点。

我认为这不太好,因为每个消费者都必须进行此检查并调用端点。有什么更好的建议吗?

谢谢

解决方法

在微服务体系结构中,每个服务都拥有其数据,其他任何服务都不能直接与其他服务的数据库进行通话。

在您的情况下,如果A修改了A拥有的域对象,而B,C等需要这些详细信息,则B,C服务必须调用A的API来获取该数据。他们不能直接与A的DB交谈。 B和C不应在其各自的DB上复制或复制数据,否则会破坏微服务架构的优势。

通常,B和C需要该域模型的某些属性子集,理想情况下,这些属性应作为消息通过Kafka主题作为消息传递。

例如,如果A维护g客户数据,而B需要客户地址和信用额度,那么A应该只是通过事件将客户地址和信用额度传递给B。如果B需要访问完整的客户数据,那么B应该调用Rest API在A上获取这些详细信息。