Day14 Kratos (一) | 青训营笔记

这是我参与「第五届青训营」伴学笔记创作活动的第 14 天

安装

go install github.com/go-kratos/kratos/cmd/kratos/v2@latest

更新

kratos upgrade

Quick Start

新建项目

kratos new helloworld

添加服务

kratos new app/user --nomod

添加proto文件

kratos proto add api/helloworld/v1/demo.proto

生成proto代码

kratos proto client api/helloworld/v1/demo.proto

生成service代码

使用 -t 指定生成目录

kratos proto server api/helloworld/v1/demo.proto -t internal/service

api

与kitex、go-micro和go-zero等框架类似的是,kratos也是需要定义idl的 kratos的idl与传统的grpc开发一样使用protobuf,可以看作是对grpc包了一层 包括grpc-gateway等工具kratos内部也集成了,因此可以快速地将原有的工程迁移到ktatos工程 并且kratos还自研了一些proto插件方便开发者更方便地开发服务

使用如下命令可以更具定义的Idl生成接口
生成 proto 模板
kratos proto add api/helloworld/v1/greeter.proto
生成 client 源码
kratos proto client api/helloworld/v1/greeter.proto
生成 server 源码
kratos proto server api/helloworld/v1/greeter.proto -t internal/service

HTTP API 是通过 protoc-gen-go-http 插件进行生成 http.Handler,然后可以注册到 HTTP Server 中:

import "github.com/go-kratos/kratos/v2/transport/http"

greeter := &GreeterService{}
srv := http.NewServer(http.Address(":8000"))
srv.HandlePrefix("/", v1.NewGreeterHandler(greeter))

gRPC API 是通过 protoc-gen-go-grpc 插件进行生成 gRPC Register,然后可以注册到 GRPC Server 中;

import "github.com/go-kratos/kratos/v2/transport/grpc"

greeter := &GreeterService{}
srv := grpc.NewServer(grpc.Address(":9000"))
v1.RegisterGreeterServer(srv, greeter)

热拔插

kratos内部使用的http框架是gorilla/mux,但是这个框架已经停止维护了,如果不想使用kratos内部集成的一些组件,kratos可以支持这些组件的热拔插,可以很简单的替换掉这些组件 在tx7do/kratos-transport: kratos transport layer extension (github.com)这个库中,作者提供了很多自己写的kratos插件,包括可以把kratos内部的gorilla替换成heartzfasthttp等框架

配置源

  1. 支持多种配置源

    Kratos定义了标准化的Source和Watcher接口来适配各种配置源。

    框架内置了本地文件file环境变量env的实现。

    另外,在contrib/config下面,我们也提供了如下的配置中心的适配供使用:

    如果上述的配置加载方式无法涵盖您的环境,您也可以通过实现接口来适配您自己的配置加载方式。

  2. 支持多种配置格式

    配置组件复用了encoding中的反序列化逻辑作为配置解析使用。默认支持以下格式的解析:

    • json
    • proto
    • xml
    • yaml
posted @ 2023-02-12 21:01  七つ一旋桜  阅读(70)  评论(0)    收藏  举报  来源