01-go-micro框架
@
目录
1. 环境准备
1.1 安装protoc
https://github.com/protocolbuffers/protobuf/releases/tag/v22.2
将可执行文件拷贝到适合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
- 生成文件如下
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 .
- 生成文件
- 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
- 目前文件,如图
2.4 初始化项目
go work init crow-system crow-user crow-web
- 生成文件如图
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
- 测试
访问 http://IP:8500端口
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) } }
查看结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2022-05-11 golang并发编程-05-同步-03-原子操作(atomic包)