使用docker加go.mod方式搭建go-micro V2微服务项目(一)

一、基础环境

备注,本人是先将go的环境卸载了,删除了go path目录下的全部文件来配置的,如果你有之前的环境可能会有相互影响的

  • mac操作系统

  • go的版本

    go version go1.14.14 darwin/amd64
    
  • 编辑器使用的是goland2020.1

二、protobuf环境的配置

  • 1、下载对应自己电脑的版本

  • 2、使用命令go env查看自己的go path地址并且在go path的目录下创建一个bin文件夹

  • 3、将第一点下载下来的东西解压出来将bin下面的protoc拷贝到go path下的bin文件夹下

  • 4、查看安装的版本

    protoc --version
    
  • 5、protoc-gen-go的安装(用于生成对应go语言的micro代码)

    go get -u github.com/golang/protobuf/proto
    go get -u github.com/golang/protobuf/protoc-gen-go
    go get github.com/micro/micro/v2/cmd/protoc-gen-micro
    
  • 6、查看go path下的bin目录下会有以下几个文件

    ➜  bin tree .                   
    .
    ├── protoc
    ├── protoc-gen-go
    └── protoc-gen-micro
    
    0 directories, 3 files
    ➜  bin 
    

三、测试protobuf

  • 1、创建一个say.proto的文件

    syntax = "proto3";
    
    package go_micro_demo;
    
    // 创建服务
    service Say {
      rpc SayHello(SayReq) returns (SayRes) {}
    }
    
    message SayReq {
      string message = 1;
    }
    
    message SayRes {
      string answer = 1;
    }
    
  • 2、在文件所在的黑窗口执行命令

    # 使用下面这个命令会生成一个say.pb.go的文件
    # protoc 文件名 --go_out=.
    protoc say.proto --go_out=.
    # 如果要生成python文件
    # protoc say.proto --python_out=.
    # 生成微服务需要的文件
    protoc --go_out=. --micro_out=. say.proto
    
  • 3、最后可以生成这样的文件目录表示你配置成功了

    ➜  say tree .
    .
    ├── say.pb.go
    ├── say.pb.micro.go
    └── say.proto
    
    0 directories, 3 files
    ➜  say 
    

四、第一个简单的微服务程序

  • 1、使用goland创建一个mod工程在这里插入图片描述

  • 2、基本目录

    ➜  go_micro_demo tree .
    .
    ├── client.go
    ├── go.mod
    ├── proto
    │   └── say
    │       └── say.proto
    └── service.go
    
    2 directories, 4 files
    
    
  • 3、使用上面的命令将proto文件生成对应的go代码

  • 4、安装微服务依赖包

    go get github.com/micro/go-micro/v2
    
  • 5、服务器端的编写

    package main
    
    import (
    	"context"
    	"fmt"
    	"github.com/micro/go-micro/v2"
    	go_micro_demo "go_micro_demo/proto/say"
    )
    
    type SayServer struct {
          
          
    
    }
    
    // SayHello方法去say.pb.micro.go文件中(RegisterSayHandler)中复制
    func (s *SayServer) SayHello(ctx context.Context, in *go_micro_demo.SayReq, out *go_micro_demo.SayRes) error {
          
          
    	out.Answer = "服务器端接收的数据:\"" + in.Message + "\""
    	return nil
    }
    
    func main() {
          
          
    	// 1.创建服务
    	service := micro.NewService(micro.Name("say.hello.server"))
    	// 2.初始化服务
    	service.Init()
    	// 3.注册微服务
    	go_micro_demo.RegisterSayHandler(service.Server(), new(SayServer))
    	// 4.运行微服务
    	if err := service.Run(); err != nil {
          
          
    		fmt.Println(err)
    	}
    }
    
  • 6、客户端的编写

    package main
    
    import (
    	"context"
    	"fmt"
    	"github.com/micro/go-micro/v2"
    	go_micro_demo "go_micro_demo/proto/say"
    )
    
    func main() {
          
          
    	// 1.实例化
    	service := micro.NewService(micro.Name("say.hello.client"))
    	// 2.初始化
    	service.Init()
    	// 3.连接到对应的服务端
    	sayServer := go_micro_demo.NewSayService("say.hello.server", service.Client())
    	// 4.调用方法通讯
    	res, err := sayServer.SayHello(context.TODO(), &go_micro_demo.SayReq{
          
          Message: "我是客户端"})
    	if err != nil {
          
          
    		fmt.Println("连接错误")
    	}
    	fmt.Println(res)
    }
    

五、使用docker创建的微服务项目

  • 1、查找镜像并下载镜像

    docker search micro/micro
    docker pull micro/micro
    
  • 2、使用docker命令创建微服务项目

    在你需要创建项目的文件夹下运行

    # docker run --rm -v $(pwd):$(pwd) -w $(pwd) micro/micro new [项目名称]
    # 下面是创建一个用户项目
    docker run --rm -v $(pwd):$(pwd) -w $(pwd) micro/micro new user
    
  • 3、将proto文件生成go文件

    • 先将proto文件中的修改为

      // 表示生成一个user的文件夹生成user的文件
      option go_package = "user;user";
      
    • 运行命令

      protoc --go_out=. --micro_out=. user.proto
      
  • 4、将创建出来的项目把v3改为v2版本

    • go.mod文件中修改的地方

      // github.com/micro/micro/v3 v3.0.0
      github.com/micro/go-micro/v2 v2.9.1
      
    • 修改main.go文件
      在这里插入图片描述

    • 修改handler下对外的文件
      在这里插入图片描述

  • 5、下载最新的依赖包

    go mod tidy
    
  • 6、运行main.go文件测试

猜你喜欢

转载自blog.csdn.net/kuangshp128/article/details/113273218