在微服务体系结构中,我们经常需要在服务之间进行通信,同时保持微服务数据主权的概念。人们通常还说基于事件的通信对于恢复力是更可取的。我相信这些概念会发生冲突。
以以下示例为例: 微服务A:通讯服务 微服务B:电子邮件传递服务 服务A需要传递时事通讯以完成其任务;因此,服务A显然依赖于B
服务A使用B定义的事件协定创建一条消息,并将其放入队列中。为了使A识别异步响应(成功/失败),服务A必须将标识附加到消息上,服务B必须将其中继回去。我相信这是一种反向依赖性,应该避免。
相反,我现在认为以下内容更有意义并提供更好的分隔。
服务A将使用B定义的消息约定来同步调用B。B随后将立即返回B拥有并由A存储的身份。响应指示该操作已排队但尚未处理。它还将返回响应发布到的队列/主题的名称。这很重要,因为我认为队列/主题应该归发布事件的服务所有。如果服务B暂时不可用,则服务A必须将此操作放在内部队列上才能具有弹性。传递消息时,它将包含消息的身份,这很好,因为该身份由服务B本身拥有。
很高兴听到您对这种方法的想法。