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

go-Kratos微服务框架入门

作者头像
杜金房
发布于 2024-05-20 08:54:12
发布于 2024-05-20 08:54:12
45000
代码可运行
举报
运行总次数:0
代码可运行
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
代码运行次数:0
运行
AI代码解释
复制

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
代码运行次数:0
运行
AI代码解释
复制

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
代码运行次数:0
运行
AI代码解释
复制
// 初始化一个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
代码运行次数:0
运行
AI代码解释
复制
    //初始化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
代码运行次数:0
运行
AI代码解释
复制
    //初始化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
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Go 语言微服务框架 Kratos 服务注册与发现
Go 语言微服务框架 Kratos 服务注册与发现,支持多种注册中心,本文我们以 Consul 为例,介绍 Kratos 项目怎么实现服务注册与发现。
frank.
2025/01/20
1630
Go 语言微服务框架 Kratos 服务注册与发现
Go 语言微服务框架 Kratos 开发 HTTP API
本文我们分为开发环境,创建项目,代码目录,HTTP API,四个部分介绍 Kratos 微服务框架。
frank.
2024/12/23
3980
Go 语言微服务框架 Kratos 开发 HTTP API
砥砺前行 | Kratos 框架 v2 版本架构演进之路
Kratos 是一套轻量级 Go 微服务框架,包含大量微服务相关功能及工具。名字来源于游戏《战神》,该游戏以希腊神话为背景,讲述了奎托斯(Kratos)由凡人成为战神并展开弑神屠杀的冒险历程。
从大数据到人工智能
2022/06/15
1.6K0
砥砺前行 | Kratos 框架 v2 版本架构演进之路
Kratos技术系列|从Kratos设计看Go微服务工程实践
导读 github.com/go-kratos/kratos(以下简称Kratos)是一套轻量级 Go 微服务框架,致力于提供完整的微服务研发体验,整合相关框架及周边工具后,微服务治理相关部分可对整体业务开发周期无感,从而更加聚焦于业务交付。Kratos在设计之初就考虑到了高可扩展性,组件化,工程化,规范化等。对每位开发者而言,整套 Kratos 框架也是不错的学习仓库,可以了解和参考微服务的技术积累和经验。 接下来我们从Protobuf、开放性、规范、依赖注入这4个点了解一下Kratos 在Go
腾讯云中间件团队
2021/07/14
2.8K0
Go 语言微服务框架 Kratos 操作 MySQL 和 Redis
Go 语言微服务框架 Kratos 不限制使用任何第三方库,我们可以根据个人喜好选择第三方库。
frank.
2024/12/30
1720
Go 语言微服务框架 Kratos 操作 MySQL 和 Redis
把Go项目从单体扩展成微服务要做哪些工作?
我们的课程到这里已经基本结束,在整个课程中大家从项目初始化时敲下的第一行命令开始咱们一起经历了怎么从零搭建出一个好用的项目框架。这里我们花了大量时间来研究怎么把项目的配置化、可观测、可追踪做好。
KevinYan
2025/05/21
1100
把Go项目从单体扩展成微服务要做哪些工作?
Go:使用 go-micro 构建微服务(二)
Go Micro还提供了Sidecar等功能。这使您可以使用Go以外的语言编写的服务 Sidecar提供服务注册,gRPC编码/解码和HTTP处理程序。它支持多种语言。
Freedom123
2024/03/29
2190
Go:使用 go-micro 构建微服务(二)
Go 语言微服务框架 Kratos 怎么读取配置?
微服务框架 Kratos 提供了一个强大的配置管理模块 - config 组件,它支持加载、解析、动态更新配置。
frank.
2025/01/13
2030
Go 语言微服务框架 Kratos 怎么读取配置?
字节微服务HTTP框架Hertz使用与源码分析|拥抱开源
Hertz[həːts] 是一个 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架 fasthttp、gin、echo 的优势, 并结合字节跳动内部的需求,使其具有高易用性、高性能、高扩展性等特点,目前在字节跳动内部已广泛使用。如今越来越多的微服务选择使用 Golang,如果对微服务性能有要求,又希望框架能够充分满足内部的可定制化需求,Hertz 会是一个不错的选择。
白泽z
2022/12/20
1.2K0
字节微服务HTTP框架Hertz使用与源码分析|拥抱开源
微服务框架 go-zero 快速实战
其实这些能力,很基础,不需要多么深入,只需要你有所了解,这样至少对于咱们去看 go-zero 涉及的知识点就不会那么费劲儿
阿兵云原生
2023/09/01
8890
微服务框架 go-zero 快速实战
kratos源码分析系列(1)
https://github.com/go-kratos/kratos是b站开源的一个微服务框架,整体来看它结合grpc生态中的grpc-gateway,以及wire依赖注入和众多常用的trace,matrix,log等中间件提供了一套微服务框架。我先尝试一下使用。
golangLeetcode
2022/12/17
3390
Golang 语言怎么使用 go-micro 和 gin 开发微服务?
Go Micro 是一个分布式系统开发框架。Go Micro 提供了分布式系统开发的核心需求,包括 RPC 和事件驱动的通信。Gin 是一个用 Golang 编写的 web 框架。本文首先介绍怎么使用 go-micro 和 go-grpc 构建微服务,然后再介绍怎么集成 gin 和 go-micro。我们使用的 go-micro 版本是 v1.18.0,golang 版本是 v1.13,gin 版本是 v1.7.2。
frank.
2021/08/13
3.1K0
Golang 语言怎么使用 go-micro 和 gin 开发微服务?
kratos源码分析系列(6)
直接获取当前节点:selector/node/direct/direct.go
golangLeetcode
2023/09/06
5770
kratos源码分析系列(6)
Go语言技巧 - 9.【浅析微服务框架】Kratos概览
截止到本文发布时,Kratos在github上的star数达到了15.9k。其中,在2021年7月,也正式推出了v2这个大版本。
junedayday
2022/01/04
2.3K0
Go语言技巧 - 9.【浅析微服务框架】Kratos概览
Windows下安装etcd集群及zRPC的简单使用
etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。
杨永贞
2021/03/04
3.2K0
微服务之服务注册和服务发现篇
seth-shi
2023/12/18
2050
微服务之服务注册和服务发现篇
[go-kratos-1]Golang微服务框架kratos安装和使用
Kratos 一套由bilibili开源轻量级 Go 微服务框架,包含大量微服务相关框架及工具。
宇宙无敌暴龙战士之心悦大王
2023/03/07
2.8K1
micro微服务 基础组件的组织方式
micro是go语言实现的一个微服务框架,该框架自身实现了为服务常见的几大要素,网关,代理,注册中心,消息传递,也支持可插拔扩展。本本通过micro中的一个核心对象展开去探讨这个项目是如何实现这些组件并将其组织在一起工作的。
魂祭心
2019/07/22
6580
micro微服务 基础组件的组织方式
使用go-zero微服务框架实现云监控后台(一.后台微服务搭建)
接上一篇文章,按照”终端出厂实现自动化运维方案",https://blog.csdn.net/yyz_1987/article/details/118358038
杨永贞
2022/01/07
1.1K0
使用go-zero微服务框架实现云监控后台(一.后台微服务搭建)
我做了一个 Go 语言的微服务工具包
多年以来,我一直认为自己是一名语言无关的软件开发人员,因为在编程语言方面,我总是把掌握基础知识和学习新概念放在首位,而不是“玩最爱”。在我 15 年的职业生涯中,我已经用多种语言(例如 Java、Scala、Go 等)编写了数千行代码。直到我精通 Go 之后,我才意识到:选择正确的语言很重要。我成为了一名真正的忠实主义者;今天,它无疑是我最喜欢的语言。它的简单、优雅以及强大的并发范式使其非常适用于下一代的分布式服务。
深度学习与Python
2021/03/12
8340
我做了一个 Go 语言的微服务工具包
推荐阅读
相关推荐
Go 语言微服务框架 Kratos 服务注册与发现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验