Go_go-micro入門示例


title: Go_go-micro入門示例
categories: Go
tags: [go, 微服務, 框架, 記錄]
date: 2019-09-28 02:07:17
comments: false

Go_go-micro入門示例


demo1

參考: Go Micro 入門指南 - https://erikjiang.github.io/2018/07/05/GoMicroGuide/

服務發現依賴項工具 Consul

首先 micro 這個框架需要且依賴於服務發現工具(service discovery),框架默認的服務發現工具是 Consul ,同時框架的插拔機制也可確保能夠切換到其他的服務發現工具上,如Etcd、NATS等,詳見 micro plugins

關於consul的安裝與運行:

  • Linux

    $ brew install consul   # 安裝
    $ consul agent -dev     # 運行
    
  • windows

    • 下載地址: https://www.consul.io/downloads.html, 所在目錄配置到 環境變量

安裝依賴包

go get -v -u google.golang.org/grpc // gRPC
go get -v -u github.com/golang/protobuf/protoc-gen-go // 安裝protoc go插件
go get -v -u github.com/micro/go-micro // Micro 框架
go get -v -u github.com/micro/protoc-gen-micro // protoc micro插件, 用於通過.proto文件生成.micro.go代碼文件
go get -v -u github.com/micro/micro // micro工具包
  • 其中有幾個會生成可執行程序. micro.exe, protoc-gen-go.exe, protoc-gen-micro.exe (沒錯, 我是在 windows 中玩的)

  • 安裝其他依賴, 不然在 run 下面的 service.go 時會報找不到這些包的錯誤.

    go get -v -u github.com/hashicorp/go-cleanhttp
    go get -v -u github.com/hashicorp/go-rootcerts
    go get -v -u github.com/hashicorp/memberlist
    go get -v -u github.com/hashicorp/serf/coordinate
    go get -v -u github.com/lucas-clemente/quic-go
    go get -v -u github.com/mitchellh/hashstructure
    go get -v -u github.com/mitchellh/mapstructure
    

創建 proto 文件. user.proto

syntax = "proto3";

service User {
    rpc Hello(Request) returns (Response) {}
}

message Request {
    string name = 1;
}

message Response {
    string msg = 1;
}

然後生成 user.micro.gouser.pb.go 文件

F:\a_link_workspace\go\GoWinEnv_Test01\src\GoMicro (master -> origin)
λ protoc -I ./protos/ --go_out=protoc-gen-go:./proto_gen --micro_out=./proto_gen ./protos/user.proto

創建服務端代碼. service.go

package main

import (
	"context"
	"fmt"
	proto "GoMicro/proto_gen"
	micro "github.com/micro/go-micro"
)

type User struct{}

func (u *User) Hello(ctx context.Context, req *proto.Request, res *proto.Response) error {
	res.Msg = "Hello " + req.Name
	return nil
}

func main() {
	service := micro.NewService(
		micro.Name("user"),
	)

	service.Init()

	proto.RegisterUserHandler(service.Server(), new(User))

	if err := service.Run(); err != nil {
		fmt.Println(err)
	}
}

創建客戶端代碼. client.go

package main

import (
	"context"
	"fmt"
	proto "GoMicro/proto_gen"
	micro "github.com/micro/go-micro"
)

func main() {
	service := micro.NewService(micro.Name("user.client"))
	service.Init()

	user := proto.NewUserService("user", service.Client())

	res, err := user.Hello(context.TODO(), &proto.Request{Name: "World ^_^"})
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(res.Msg)
}

打開 consul

  1. 命令: consul agent -dev

    $ consul agent -dev
    ==> Starting Consul agent...
               Version: 'v1.6.1'
               Node ID: '700d980f-5e00-4595-c759-a54286dab099'
             Node name: 'DESKTOP-B3461GK'
            Datacenter: 'dc1' (Segment: '<all>')
                Server: true (Bootstrap: false)
           Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600)
          Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
               Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false
    
  2. 可以通過網頁訪問到. http://127.0.0.1:8500/ui

運行 服務端/客戶端

  1. 啓動服務端. go run service.go

    F:\a_link_workspace\go\GoWinEnv_Test01\src\GoMicro\test001\srv (master -> origin)
    λ go run service.go
    2019/09/28 02:04:58 Transport [http] Listening on [::]:53802
    2019/09/28 02:04:58 Broker [http] Connected to [::]:53803
    2019/09/28 02:04:58 Registry [mdns] Registering node: user-d9a8a8db-28c6-424f-ab2a-843f80049cea
    
    • 此時刷新:http://127.0.0.1:8500/ui/ 頁面會發現新服務user;這個暫時沒有看到.
  2. 啓動客戶端. go run client.go. 會輸出服務端返回的值

    F:\a_link_workspace\go\GoWinEnv_Test01\src\GoMicro\test001\cli (master -> origin)
    λ go run client.go
    Hello World ^_^
    

列出服務

使用前面生成的工具 micro.exe, 可以查看到 service.go 起的服務 user ( micro.Name("user") )

F:\a_link_workspace\go\GoWinEnv_Test01 (master -> origin)
λ micro list services // 指令
user

web 界面

F:\a_link_workspace\go\GoWinEnv_Test01 (master -> origin)
λ micro web // 指令
2019/09/28 15:23:02 HTTP API Listening on [::]:8082 // 默認端口
2019/09/28 15:23:02 Transport [http] Listening on [::]:60676
2019/09/28 15:23:02 Broker [http] Connected to [::]:60677
2019/09/28 15:23:02 Registry [mdns] Registering node: go.micro.web-4832fb75-d027-4b66-a420-09abae8e6ecb

然後打開 http://localhost:8082/registry 就能訪問已有的服務

點擊 user 查看服務的具體信息


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章