推荐看一下 Kratos 官方文档 更加流畅观看此文章,本机器这里已经安装好了 kratos、proto、wire、make
等所需的命令工具
1.先下载beer-shop模板
git clone https://github.com/go-kratos/beer-shop.git
2.删除api和app下的全部文件
3.修改go.mod文件
把module github.com/go-kratos/beer-shop 改成beer-shop,执行go mod vendor命令
4.生成proto相关文件
api下新建test目录,执行kratos proto add api/test/service/v1/test.proto命令
修改test.proto文件,如下代码
syntax = "proto3";
package api.test.service.v1;
import "google/api/annotations.proto";
option go_package = "github.com/go-kratos/beer-shop/api/test/service/v1;v1";
service Test {
rpc CreateTest (CreateTestRequest) returns (CreateTestReply){
option (google.api.http) = {
get: "/test/create/{name}"
};
};
rpc UpdateTest (UpdateTestRequest) returns (UpdateTestReply);
rpc DeleteTest (DeleteTestRequest) returns (DeleteTestReply);
rpc GetTest (GetTestRequest) returns (GetTestReply);
rpc ListTest (ListTestRequest) returns (ListTestReply);
}
message CreateTestRequest {
string name = 1;
}
message CreateTestReply {
string message = 1;
}
message UpdateTestRequest {
int64 id = 1;
string name = 2;
}
message UpdateTestReply {
string message = 1;
}
message DeleteTestRequest {}
message DeleteTestReply {}
message GetTestRequest {
int64 id = 1;
}
message GetTestReply {
string message = 1;
}
message ListTestRequest {}
message ListTestReply {}
5.然后生成proto代码
kratos proto client api/test/service/v1/test.proto
6.app下新增test/service文件夹
7.在service下,新增cmd/server文件夹
在servser下新增main.go文件
package main
import (
"flag"
"os"
"beer-shop/app/test/service/internal/conf"
"github.com/go-kratos/kratos/v2"
"github.com/go-kratos/kratos/v2/config"
"github.com/go-kratos/kratos/v2/config/file"
"github.com/go-kratos/kratos/v2/log"
"github.com/go-kratos/kratos/v2/registry"
"github.com/go-kratos/kratos/v2/transport/grpc"
"github.com/go-kratos/kratos/v2/transport/http"
"go.opentelemetry.io/otel/exporters/jaeger"
"go.opentelemetry.io/otel/sdk/resource"
tracesdk "go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
)
// go build -ldflags "-X main.Version=x.y.z"
var (
// Name is the name of the compiled software.
Name = "beer.test.service"
// Version is the version of the compiled software.
Version string
// flagconf is the config flag.
flagconf string
)
func init() {
flag.StringVar(&flagconf, "conf", "../../configs", "config path, eg: -conf config.yaml")
}
func newApp(logger log.Logger, gs *grpc.Server, rr registry.Registrar, hs *http.Server) *kratos.App {
return kratos.New(
kratos.Name(Name),
kratos.Version(Version),
kratos.Metadata(map[string]string{}),
kratos.Logger(logger),
kratos.Server(
gs,
hs,
),
kratos.Registrar(rr),
)
}
func main() {
flag.Parse()
logger := log.With(log.NewStdLogger(os.Stdout),
"service.name", Name,
"service.version", Version,
"ts", log.DefaultTimestamp,
"caller", log.DefaultCaller,
)
c := config.New(
config.WithSourc