go

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

2023-05-10  本文已影响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 创建第一个服务

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

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

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 .

2.3 同法再创建2个服务

创建服务

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

创建服务

go-micro new service web

初始化

PS E:\go\src\hello> cd .\web\
PS E:\go\src\hello\web> make init proto update tidy

2.4 初始化项目

go work init crow-system crow-user crow-web

3. 微服务间调用

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

在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)
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

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 修改代码

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
上一篇下一篇

猜你喜欢

热点阅读