带有微服务间数据传输的 Go-kit 真实世界示例

Ser*_*e B 5 go microservices

我尝试使用 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框架中如何构建微服务到微服务通信?请告诉我方式/模式。我完全不明白。

我认为这是因为他们只是共享对数据的直接访问。但在现实世界的微服务中,我预计微服务会相互通信以获取所需的数据。我不明白如何在 go-kit 框架中做到这一点。

Mar*_*cus 5

我是运输示例的作者。很抱歉没有早点看到您的问题。

这个特殊的例子需要一些解释。这是一个基于领域驱动设计的战术模式的例子,这意味着当我们提到服务时,我们需要理解我们在谈论什么。

有处理应用程序提供的用例的应用程序服务,例如booking.Service。有域名服务驻留在域层,并提供您的域名与不一定绑定到域对象的概念。在运输示例中,routing.Service是一个域服务,其实现实际上查询另一个应用程序,在这种情况下,它与此路由服务对话。

应用程序和域服务只是组织我们代码的方式。换句话说,这些服务在进程内进行通信,而微服务通常使用某种形式的公共传输通过网络进行通信,例如 JSON、gRPC 等。

回到你的问题,我相信你正在寻找的是routing.Service你可以在这里找到的实现。

此处使用的代理服务在本页的客户端端点下进行了说明,用于从您的应用程序向另一个应用程序发出请求。

如果你想了解更多细节,我不久前写了一篇关于这个主题的博客文章。