假设我有一个用于消息传递的微服务。微服务知道如何发送电子邮件。该服务具有电子邮件模板,这些电子邮件模板具有诸如pugjs之类的“模板引擎”,并且可以替换邮件正文中的数据。
我有一个用户服务(例如,用于身份验证/授权)和一个银行帐户服务(每个用户都有一个)。很明显,在用户微服务和银行帐户微服务之间,除了用户的uuid外,我们不必复制任何数据。
但是我现在想每天向每个用户发送一条带有其帐户对帐单的消息。消息微服务需要来自用户微服务和银行帐户微服务的数据。
好吧...这是现实世界中的一个小案例。现在,我知道要拥有去耦微服务的优势,我必须遵循一些规则:
好的。我可以使用代理,每次创建/更新新用户时,消息微服务都可以存储该数据。但这确实是愚蠢的事情:
我读了很多关于微服务和人们为简单示例创建规则的文章。但是我从来没有真正看到过像上面这样的很好的解释和真实的例子。
那么如何在没有数据重复的情况下拥有上述微服务?
答案 0 :(得分:1)
在您的域示例中,我不会让邮件服务知道有关银行或用户详细信息的任何信息。相反,消息服务应该只接收将消息与给定内容一起发送给收件人的指令。我将使用专门的计划作业(可能实现为帐户通知服务),该作业执行从相应服务中获取用户和帐户数据的工作,为消息服务编译信息并指示其实际发送消息。这引入了另一个“更高级别的业务目的实体/服务”,但使您可以清楚地分离关注点。
通常,您的“基本”域服务经常被代表特定业务目的并需要其数据的另一服务使用。只要将关注点清楚地分开并且对接口进行版本控制,传达更改等,依赖性本身就不是一件坏事。
请不要忘记,微服务的整个思想是允许团队以明确的接口承担专门的职责。与组织和架构有关。