我尝试使用go-kit(gokit.io)并使用它构建实际应用程序。 我看一下例子。这些例子很棒。但我不明白如何在go-kit框架中为通信/数据传输提供服务。
我可以看到“真实世界”的发货应用程序,但我不明白它是如何成为“真实世界”的微服务。我可以在消息来源中看到,例如,他们构建预订服务只是将外国存储库传递给服务
type service struct {
cargoRepository cargo.Repository
locationRepository location.Repository
routingService routing.Service
handlingEventRepository cargo.HandlingEventRepository
}
以后他们从存储库中获取数据(这个存储库属于外部微服务)只是调用方法:
locationRepository.Find(...)
有人可以解释一下我:
我看到它只是共享直接访问数据。但在现实世界的微服务中,我预计微服务将相互通信以获取所需的数据。我不明白如何在go-kit框架中做到这一点。
答案 0 :(得分:4)
我是发货示例的作者。很抱歉没有提前看到您的问题。
这个特殊的例子需要一些解释。这是一个基于Domain Driven Design的战术模式的示例,这意味着当我们引用服务时,我们需要了解我们正在讨论的内容。
有应用程序服务处理应用程序提供的用例,例如: booking.Service
。 域服务驻留在域层中,并为您的域提供不必绑定到域对象的概念。在发送示例中,routing.Service
是域服务,其实现实际上查询另一个应用程序,在这种情况下,它与this routing service进行对话。
应用程序和域服务仅仅是组织代码的方式。换句话说,这些服务在一个过程中进行通信,而微服务通常使用某种形式的公共传输通过网络进行通信,例如, JSON,gRPC等。
回到你的问题,我相信你正在寻找的是routing.Service
的实施,你可以找到here。
此处使用的代理服务在this page上的客户端端点下进行了解释,用于向您的应用程序发出请求。
如果你想了解更多细节,我不久前在这个主题上写了blog post。