我的团队对于如何使用消息总线来构建微服务感到困惑。
我们目前有一个 API 网关,背后有许多微服务,所有微服务都通过 http 进行通信。
在研究实现消息总线 (Kafka) 后,团队对于消费者和 API 是否应该位于同一个服务中或者它们是否应该是两个单独的服务感到困惑。
有些人认为它们应该分开,因为它们有不同的扩展问题,而另一些人则认为它们应该位于同一个服务中,因为它们与相同的数据库通信并具有相同的域问题。 IE)不在两个服务之间重复代码。
你有什么想法?
我们希望它们处于相同的服务中,因为从逻辑上讲,它们在相同的对象上工作。
这也很大程度上取决于您如何编写业务逻辑。就像我们更喜欢在聚合(域驱动设计)中编写业务逻辑一样,这就是为什么在同一服务中编写消费者是有意义的。
在某些情况下,他们只是更新数据以搜索某种事物,您可以将它们编写在单独的服务中。
您还可以查看Lagom(Java 微服务框架)
我对此的看法是,Webapi 应该在一个进程中,而消息消费者应该在一个单独的进程中。然而,这两个进程的集合是一个微服务。也就是说,您应该将它们作为一个单元部署在一起,并且可以在两者之间共享域(因为它仍然是一个微服务)。
上面的微服务示例仍然专注于一个业务能力/有界上下文,尽管它由两个流程组成。
我认为在考虑有界上下文时区分业务能力和软件能力很重要。示例中的流程具有不同的角色来完成单一业务能力。