前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go-Kratos微服务框架入门

go-Kratos微服务框架入门

作者头像
Seven Du
发布2024-05-20 16:54:12
1230
发布2024-05-20 16:54:12
举报
Kratos是B站开源的一套轻量级 Go 微服务框架,包含大量微服务相关框架,组件及工具,具有易扩展,易集成,易上手等特点。原因是Kratos的设计并不绑定于特定的基础设施,不限定于某种注册中心, 或某种数据库ORM等,所以基于以上特点我们可以在创建服务时选用我们常用熟悉的组件进行集成。主要是Kratos给了我们开发人员更多灵活的选择空间,方便自定义实现,可以迅速的新建一个微服务或者可以更快的适应已有的微服务。
  • 简单:不过度设计,代码平实简单。
  • 通用:通用业务开发所需要的基础库的功能。
  • 高效:提高业务迭代的效率。
  • 稳定:基础库可测试性高,覆盖率高,有线上实践安全可靠。
  • 健壮:通过良好的基础库设计,减少错用。
  • 高性能:性能高,但不特定为了性能做 hack 优化,引入 unsafe。
  • 扩展性:良好的接口设计,来扩展实现,或者通过新增基础库目录来扩展功能。
  • 容错性:为失败设计,大量引入对 SRE 的理解,鲁棒性高。
  • 工具链:包含大量工具链,比如 cache 代码生成,lint 工具等。

这是kratos官方挂出的框架设计出发点,比如 简单,高效,扩展性,容错性是十分契合go开发风格的。然而kratos这个框架,无疑将go的这些特性进行了放大。接下来,我会分享一些在使用过程中比较好用的组件与kratos框架结合使用示列。

分享组件之前,先根据官网的快速开始把示列跑起来 https://go-kratos.dev/docs/getting-started/start 跑起来之后 curl http://127.0.0.1:8000/helloworld/kratos 试试服务是否正常?我这里本地已经能正常访问了

代码语言:javascript
复制

mac@macdeMBP helloworld-kratos % curl 'http://127.0.0.1:8000/helloworld/kratos-xyt'
{"message":"Hello kratos-xyt"}%                                                                                                                                             
mac@macdeMBP helloworld-kratos %

基本现在所有的服务都会有配置文件,配置文件的优点是把一些可变的参数或者配置放在配置文件里面,当变更时直接更新配置文件即可,不用修改代码。kratos推荐了config和apollo两种配置组件,这里咱们分享config的使用。

配置文件基本配置如下:

代码语言:javascript
复制

service:
  name: config
  version: v1.0.0
http:
  server: 
    address: 0.0.0.0:8000
    timeout: 1s
grpc:
  server:
    address: 0.0.0.0:9000
    timeout: 1s
代码语言:javascript
复制
// 初始化一个config
c := config.New(
    config.WithSource(
      file.NewSource(flagconf),
    ),
  )
  if err := c.Load(); err != nil {
    panic(err)
  }

  // 其中一种方式是定义config的结构体,将config的配置解析到结构v中
  var v struct {
    Service struct {
      Name    string `json:"name"`
      Version string `json:"version"`
    } `json:"service"`
  }
  if err := c.Scan(&v); err != nil {
    panic(err)
  }
  log.Printf("config: %+v", v)

    // 另一种方式是直接通过config的目录接口获取值
  name, err := c.Value("service.name").String()
  if err != nil {
    panic(err)
  }
  log.Printf("service: %s", name)

kratos是一个微服务框架,微服务的重要组成部分之一就是注册中心,注册中心一般会提供服务注册和服务发现功能, kratos推荐了注册中心组件主要包括有etcd,nacos,consul,zookeeper等,咱们这里主要分享一个由go开发的注册中心组件etcd。

client端etcd使用示列如下:

代码语言:javascript
复制
    //初始化client
  cli, err := clientv3.New(clientv3.Config{
    Endpoints: []string{"127.0.0.1:2379"},
      })
      //初始化etcd
      r := etcd.New(cli)
      //初始化grpc
      connGRPC, err := grpc.DialInsecure(
      context.Background(),
      //配置服务端注册到etcd的servername
      grpc.WithEndpoint("discovery:///helloworld"),
      grpc.WithDiscovery(r),
      )

server端etcd使用示列如下:

代码语言:javascript
复制
    //初始化etcd client
  client, err := etcdclient.New(etcdclient.Config{
    Endpoints: []string{"127.0.0.1:2379"},
  })
    //初始化grpc服务端,配置端口9000
  grpcSrv := grpc.NewServer(
    grpc.Address(":9000"),
    grpc.Middleware(
      recovery.Recovery(),
    ),
  )
    //将服务注册到etcd里面,服务名为helloworld
  r := etcd.New(client)
  app := kratos.New(
    kratos.Name("helloworld"),
    kratos.Server(
      grpcSrv,
    ),
    kratos.Registrar(r),
  )

http router路由组件常用比较多,比如go官方的路由标准库,gin路由框架,echo框架,mux框架,对于咱们微服务来说, 与大部分客户端通信一般都是通过http协议,所以选择一款合适http路由框架十分重要,不仅能使提升代码的阅读性,还能提高我们的开发效率。咱们这里就主要分享如何在kratos中集成使用gin来做http路由。

gin使用示列如下:

代码语言:javascript
复制
func main() {
  //初始化一个默认路由实例
  router := gin.Default()
  // 使用kratos中间件
  router.Use(kgin.Middlewares(recovery.Recovery(), customMiddleware))
    //配置url及路由目的地方法
  router.GET("/helloworld/:name", func(ctx *gin.Context) {
    name := ctx.Param("name")
    if name == "error" {
      // 返回kratos error
      kgin.Error(ctx, errors.Unauthorized("auth_error", "no authentication"))
    } else {
      ctx.JSON(200, map[string]string{"welcome": name})
    }
  })
    //初始化一个http server 并监听端口8000
  httpSrv := http.NewServer(http.Address(":8000"))
  httpSrv.HandlePrefix("/", router)
    //new一个kratos app
  app := kratos.New(
    kratos.Name("gin"),
    kratos.Server(
      httpSrv,
    ),
  )
}

kratos微服务框架更像是微服务工具的集合,可以集成市面上比较主流的微服务组件,具有简洁,易扩展,易上手等特点。通过kratos提供的工具可以快速的搭建一套微服务系统,具体请参考官方文档:https://go-kratos.dev/docs/。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeSWITCH中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档