如何使用Go-kit搭建微服务,需要引入Gin一起使用吗?

问题描述 投票:0回答:3

一直在学习用Go搭建微服务框架,之前学习用Gin搭建web服务。 gin的路由和中间件功能我觉得很强大,但是go-kit好像没有,或者不知道?它们可以一起使用吗?

还有,我以前用过Java的Springboot和SpringCloud,Go语言有没有对应的技术?如果Gin等于Springboot,Go-kit是否等于SpringCloud

谢谢!

你还有什么其他的知识,请告诉我,我想知道微服务框架是如何构建的,以便在企业中普遍实施。

再次感谢!

rpc grpc-go
3个回答
0
投票

是的,Gin 和 Go-kit 都是在 Go 中构建 Web 服务的流行框架,但它们具有不同的设计理念和功能。 Gin 是一个轻量级且灵活的 HTTP 框架,提供路由、中间件和其他开箱即用的功能。另一方面,Go-kit 是一个用于构建可扩展和模块化微服务的工具包,它专注于分布式系统的核心构建块,例如传输、端点和服务发现。

虽然 Gin 为构建 Web 服务提供了许多有用的功能,但它可能不是构建复杂微服务架构的最佳选择。另一方面,Go-kit 提供了一种更加自以为是的方法,鼓励关注点分离、模块化和可测试性,但它需要更多的手动设置和配置。

也就是说,可以在同一个项目中同时使用 Gin 和 Go-kit。例如,您可以使用 Gin 来处理 HTTP 请求和路由,并使用 Go-kit 来实现您的微服务的业务逻辑。

Go中相当于Springboot和SpringCloud的,有几个框架和工具可以帮助你在Go中构建和管理微服务,比如:

Go-Micro:一个用于在 Go 中构建微服务的框架,它为服务发现、负载平衡和通信提供了一整套功能。

KrakenD:Go 的 API 网关和微服务框架,提供灵活且可扩展的架构来管理 API 请求和响应。

Consul:服务发现和配置管理的服务网格和工具,可以与 Go 和其他语言一起使用。

Istio:另一个服务网格,为微服务架构提供流量管理、安全性和可观察性等高级功能。

根据您的特定需求和要求选择正确的工具和框架非常重要,并牢记简单性和灵活性之间以及开发速度和可扩展性之间的权衡。


0
投票

我觉得你的关键词一定要加

RPC
或者
IPC

你可以在

https://github.com/go-kit/examples/tree/master/addsvc

找到一些想法

如果你想要更灵活的尝试标准库:

https://pkg.go.dev/net/rpc
Cross your microservices


0
投票

是的,您可以同时使用

Gin
Go-kit
。您可以使用 Gin 来处理 HTTP 请求和中间件,使用 Go-kit 来组织微服务架构和服务之间的通信。

例子-

// endpoint.go
package main

import (
    "context"
    "github.com/go-kit/kit/endpoint"
)

type upperCaseRequest struct {
    S string `json:"s"`
}

type upperCaseResponse struct {
    V   string `json:"v"`
    Err string `json:"err,omitempty"`
}

func makeUpperCaseEndpoint(svc StringService) endpoint.Endpoint {
    return func(ctx context.Context, request interface{}) (interface{}, error) {
        req := request.(upperCaseRequest)
        v, err := svc.UpperCase(req.S)
        if err != nil {
            return upperCaseResponse{v, err.Error()}, nil
        }
        return upperCaseResponse{v, ""}, nil
    }
}

设置 Gin 并将其与您的 Go-kit 服务集成:

// main.go
package main

import (
    "context"
    "encoding/json"
    "net/http"

    "github.com/gin-gonic/gin"
    httptransport "github.com/go-kit/kit/transport/http"
)

func main() {
    // Create your service instance
    svc := stringService{}

    // Create the Go-kit endpoint
    upperCaseEndpoint := makeUpperCaseEndpoint(svc)

    // Set up the Go-kit HTTP transport
    upperCaseHandler := httptransport.NewServer(
        upperCaseEndpoint,
        decodeUpperCaseRequest,
        encodeResponse,
    )

    // Set up Gin
    router := gin.Default()

    // Register your endpoint with Gin
    router.POST("/uppercase", gin.WrapH(upperCaseHandler))

    // Start the Gin server
    router.Run(":8080")
}

func decodeUpperCaseRequest(_ context.Context, r *http.Request) (interface{}, error) {
    var req upperCaseRequest
    err := json.NewDecoder(r.Body).Decode(&req)
    return req, err
}

func encodeResponse(_ context.Context, w http.ResponseWriter, response interface{}) error {
    w.Header().Set("Content-Type", "application/json; charset=utf-8")
    return json.NewEncoder(w).Encode(response)
}

这是非常简化的代码版本。只是为了演示。

关于您关于 Go 中 SpringBoot 和 SpringCloud 等价物的问题:

Gin 可以被认为等同于 SpringBoot,因为它是一个用于创建 Web 服务、处理路由和中间件的 Web 框架。

Go-kit 可以被认为等同于 SpringCloud,因为它是一个用于构建微服务并处理它们之间通信的工具包。

除了Go-kit,Go还有其他微服务框架和库可用,例如:

Micro:一个提供服务发现、负载均衡等功能的微服务开发框架。

gRPC:一个高性能的 RPC 框架,支持使用协议缓冲区的服务定义并允许高效通信

© www.soinside.com 2019 - 2024. All rights reserved.