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

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

查看结果
在这里插入图片描述


在这里插入图片描述

好的,针对你的问题,我将给出一个基本的订单微服务的代码示例,使用 Go Micro 框架来实现: ```go // 订单微服务 package main import ( "context" "fmt" "log" "time" "github.com/micro/go-micro" pb "path/to/proto" // 导入 proto 文件 ) // 定义订单服务 type OrderService struct{} // 实现创建订单的方法 func (s *OrderService) CreateOrder(ctx context.Context, req *pb.CreateOrderRequest, rsp *pb.CreateOrderResponse) error { // 从请求中获取订单信息 order := req.Order // TODO: 在这里执行创建订单的逻辑 // ... // 构造响应 rsp.Order = order rsp.CreatedAt = time.Now().Unix() return nil } func main() { // 创建服务实例 service := micro.NewService( micro.Name("example.service.order"), ) // 初始化服务 service.Init() // 注册订单服务 pb.RegisterOrderServiceHandler(service.Server(), new(OrderService)) // 启动服务 if err := service.Run(); err != nil { log.Fatal(err) } } ``` 在上面的示例中,我们定义了一个 `OrderService` 结构体,实现了 `CreateOrder` 方法用于创建订单。在 `main` 函数中,我们创建了一个 `micro.Service` 实例,并通过 `pb.RegisterOrderServiceHandler` 方法将订单服务注册到服务实例中。最后,我们通过调用 `Run` 方法启动服务。 当服务启动后,客户端可以通过调用 `OrderService.CreateOrder` 方法来创建订单。客户端发送的请求是一个 `CreateOrderRequest` 对象,包含订单的信息,服务端返回的响应是一个 `CreateOrderResponse` 对象,包含创建订单的时和订单信息。 需要注意的是,在实际的项目中,还需要考虑一些其他的问题,比如数据库的连接、数据的验证和错误处理等。但是这个简单的示例可以帮助你了解如何使用 Go Micro 框架来实现一个基本的微服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玄德公笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值