我给你我两分钱。
but I also get the impression that it becomes much harder to track a message's path though the system.
你说得对,发布订阅SOA架构AKA(SOA 2.0)提供脱钩了很多,但也付出了代价,因为这正是发生什么事,但像Splunk的工具可以帮助许多。
seems that direct HTTP calls between services and/or a pubsub bus are two common approaches
其实,如果你看一下最常用的.NET事件的SOA框架(NServiceBus,骡子和MassTransit)他们不使用HTTP调用,但是是可以实现一个微服务架构和使用HTTP作为通信协议。
我知道你想要开始应用一些最好的企业架构概念,但我会说你最好从更简单但更强大的基础开始。没有意识到你跳到事件soa,不知道你是否真的需要它。如果我正在创建一个新系统,并希望确保我正确适应了DDD和SOA原则,我将首先确定我的域的服务。因此,假设您有3个服务,您可以先为每个服务声明公共合同,然后您不需要任何特殊的服务,就可以从带有同步REST API的WCF/ASP.NET Web API开始。然后,您将确保每个服务都会获得自己的数据库,因为您的目标是低耦合,然后您可以使用WCF/ASP.NET Web API再次创建一个API层(外部可见的层)因为你的微服务不应该直接暴露给外部世界。因此,在这一点上,您将拥有一个像设计或体系结构一样简单的SOA,但由于您将拥有明确定义的合同,因此您可以通过向其添加异步功能来扩展服务,并且您可以从添加消息队列开始到每个服务。你知道,你不需要从一个复杂的系统开始,从一些基本的,明确定义的开始,这可以让你在必要时扩展。
如果您愿意,我所描述的系统可以扩展为支持事件,而且此时您已经同步消息的事实不会阻止您将异步消息添加到系统中。
但这些只是我的两分钱。