我尝试使用 go-kit (gokit.io) 并用它构建实际应用程序。我查看示例。这些例子很棒。但我不明白如何在 go-kit 框架中为通信/数据传输提供服务。
我可以看到“真实世界”的运输应用程序,但我不明白它怎么可能是“真实世界”的微服务。我可以在来源中看到,例如,他们构建的预订服务只是将外部存储库传递给服务
type service struct {
cargoRepository cargo.Repository
locationRepository location.Repository
routingService routing.Service
handlingEventRepository cargo.HandlingEventRepository
}
Run Code Online (Sandbox Code Playgroud)
然后他们从存储库中获取数据(这个存储库属于国外微服务),只需调用该方法:
locationRepository.Find(...)
有人可以解释我吗:
我认为这是因为他们只是共享对数据的直接访问。但在现实世界的微服务中,我预计微服务会相互通信以获取所需的数据。我不明白如何在 go-kit 框架中做到这一点。
我是运输示例的作者。很抱歉没有早点看到您的问题。
这个特殊的例子需要一些解释。这是一个基于领域驱动设计的战术模式的例子,这意味着当我们提到服务时,我们需要理解我们在谈论什么。
有处理应用程序提供的用例的应用程序服务,例如booking.Service。有域名服务驻留在域层,并提供您的域名与不一定绑定到域对象的概念。在运输示例中,routing.Service是一个域服务,其实现实际上查询另一个应用程序,在这种情况下,它与此路由服务对话。
应用程序和域服务只是组织我们代码的方式。换句话说,这些服务在进程内进行通信,而微服务通常使用某种形式的公共传输通过网络进行通信,例如 JSON、gRPC 等。
回到你的问题,我相信你正在寻找的是routing.Service你可以在这里找到的实现。
此处使用的代理服务在本页的客户端端点下进行了说明,用于从您的应用程序向另一个应用程序发出请求。
如果你想了解更多细节,我不久前写了一篇关于这个主题的博客文章。