美文网首页go
go-micro框架-01-启动微服务及微服务间的调用

go-micro框架-01-启动微服务及微服务间的调用

作者: 玄德公笔记 | 来源:发表于2023-05-10 09:13 被阅读0次

    1. 环境准备

    1.1 安装protoc

    https://github.com/protocolbuffers/protobuf/releases/tag/v22.2

    image.png

    将可执行文件拷贝到适合bin目录。

    1.2 安装 go-micro

    go install github.com/go-micro/cli/cmd/go-micro@latest
    

    2. 创建微服务项目

    随便创建3个服务做测试,名字仅做服务区分

    2.1 创建第一个服务

    • 创建 crow-system服务
    PS E:\go\src\crow-han> go-micro new service crow-system
    

    输出如下

    creating service crow-system
    
    install requirements:
    
    protoc is needed for code generation. You can either install it using your 
    pacakge manager, or manually install it by downloading the protoc zip packages 
    (protoc-$VERSION-$PLATFORM.zip) from https://github.com/protocolbuffers/protobuf/releases/latest 
    and installing its contents.
    
    compile the proto file crow-system.proto and install dependencies:
    
    cd crow-system
    make init proto update tidy
    
    
    • 生成文件如下
    image.png

    2.2 初始化

    按创建服务时,输出中的提示compile the proto file crow-system.proto and install dependencies的内容初始化服务

    • 初始化
    PS E:\go\src\hello> cd .\crow-system\
    PS E:\go\src\hello\system> make init proto update tidy
    
    • Makefile文件

    这部分不用操作,仅了解一下我们刚才做了什么。

    GOPATH:=$(shell go env GOPATH)
    
    .PHONY: init
    init:
        @go get -u google.golang.org/protobuf/proto
        @go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
        @go install github.com/go-micro/generator/cmd/protoc-gen-micro@latest
    
    .PHONY: proto
    proto:
        @protoc --proto_path=. --micro_out=. --go_out=:. proto/crow-user.proto
    
    .PHONY: update
    update:
        @go get -u
    
    .PHONY: tidy
    tidy:
        @go mod tidy
    
    .PHONY: build
    build:
        @go build -o crow-user *.go
    
    .PHONY: test
    test:
        @go test -v ./... -cover
    
    .PHONY: docker
    docker:
        @docker build -t crow-user:latest .
    
    • 生成文件


      image.png
      • proto中生成了两个文件
      • go.mod 中的依赖也有了

    2.3 同法再创建2个服务

    • 创建crow-user服务

    创建服务

    go-micro new service crow-user
    

    初始化

    PS E:\go\src\hello> cd .\crow-user\
    PS E:\go\src\hello\user> make init proto update tidy
    
    • 创建 crow-web

    创建服务

    go-micro new service web
    

    初始化

    PS E:\go\src\hello> cd .\web\
    PS E:\go\src\hello\web> make init proto update tidy
    
    • 目前文件,如图


      image.png

    2.4 初始化项目

    go work init crow-system crow-user crow-web
    
    • 生成文件如图


      image.png

    3. 微服务间调用

    比如:我们让 crow-system调用crow-user

    • client端

    在crow-system服务的main.go文件中的main函数里添加如下内容:

        //調用crow-user
        userSrv := crowuser.NewCrowUserService("crow-user", srv.Client())
        resp, err := userSrv.Call(context.Background(), &crowuser.CallRequest{
            Name: "Liu Bei",
        })
        if err != nil {
            logger.Error(err)
        }
        logger.Infof("request : %+v",resp)
    
    • 测试
      • 启动被调用服务: crow-user
      • 启动客户服务: crow-system
    API server listening at: 127.0.0.1:55015
    2023-03-30 14:16:35  file=crow-system/main.go:39 level=info request : msg:"Hello Liu Bei"
    2023-03-30 14:16:35  file=crow-system/main.go:42 level=info Starting [service] crow-system
    2023-03-30 14:16:35  file=v4@v4.10.0/service.go:99 level=info Transport [http] Listening on [::]:55022
    2023-03-30 14:16:35  file=v4@v4.10.0/service.go:99 level=info Broker [http] Connected to 127.0.0.1:55023
    2023-03-30 14:16:35  file=server/rpc_server.go:555 level=info Registry [mdns] Registering node: crow-system-dbf03259-af7e-437b-9930-1fdfba772692
    

    4. 使用 consul

    4.1 启动consul

    • 在consul目录中创建docker-compose.yml文件内容如下
    version: '3.1'
    services:
     consul:
      image: harbocto.xxx.com.cn/public/consul:1.9.4 #我的内网镜像,需要替换。
      restart: always
      command:
        agent
        -server
        -bootstrap
        -ui
        -node=1
        -client='0.0.0.0'
      ports:
        - 8500:8500
    
    • 启动
    docker-compose up -d
    

    4.2 修改代码

    • 每个项目的main函数中添加如下标记的内容
    func main() {
        // Create service
        srv := micro.NewService()
    
        //添加下边这里段,创建consul配置
        //consulRegis := consul.NewRegistry(registry.Addrs("10.10.xxx.32:8500"))
        consulRegis := consul.NewRegistry(func(options *registry.Options) {
            options.Addrs = []string{
                "10.10.xxx.32:8500",
            }
        })
    
        srv.Init(
            micro.Name(service),
            micro.Version(version),
            micro.Registry(consulRegis), //添加这一行,使用consul配置
        )
    
        // Register handler
        if err := pb.RegisterCrowUserHandler(srv.Server(), new(handler.CrowUser)); err != nil {
            logger.Fatal(err)
        }
        // Run service
        if err := srv.Run(); err != nil {
            logger.Fatal(err)
        }
    }
    

    查看结果


    image.png

    相关文章

      网友评论

        本文标题:go-micro框架-01-启动微服务及微服务间的调用

        本文链接:https://www.haomeiwen.com/subject/kdgdsdtx.html