Copyright © 2022-2025 aizws.net · 网站版本: v1.2.6·内部版本: v1.25.5·
页面加载耗时 0.00 毫秒·物理内存 86.6MB ·虚拟内存 1304.4MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
在构建微服务时,使用服务注册和发现可以减少配置的复杂性。
注册机制提供了一个服务发现机制来将名称解析为地址。它可以由consul,etcd,zookeeper,dns,gossip等提供支持。一个服务应该在启动时使用注册机制进行注册,并在关闭时取消注册。
Go Micro 支持 consul、etcd、dns 多种方式进行服务注册和发现,默认使用 mdns。
consul 是一个分布式一致性的 key-value 存储技术, 被用来做配置共享和服务发现。
consul 在开发或者测试环境中,可以直接使用 docker 运行。
docker run --name consul -d -p 8500:8500 consul agent -server -ui -bootstrap-expect=1 -client=0.0.0.0
可以通过浏览器直接管理 consul,地址为:http://localhost:8500。
Go Micro 的 RPC 微服务,使用 consul 作为服务注册的方法如下:
package main
import (
"context"
"github.com/micro/go-micro"
"github.com/micro/go-micro/registry"
"github.com/micro/go-micro/util/log"
"github.com/micro/go-plugins/registry/consul"
"hello/proto/hello"
)
func main() {
// 创建 consul 服务注册项,其中 192.168.3.25:2379 为 consul 服务地址。
// consul 服务地址按照实际情况填写
reg := consul.NewRegistry(registry.Addrs("192.168.3.25:2379"))
// 创建一个新的服务,服务名为 go.micro.srv.hello
service := micro.NewService(
micro.Name("go.micro.srv.hello"),
micro.Version("latest"),
// 使用服务注册插件
micro.Registry(reg),
)
// 通过命令行参数或者插件初始化服务
service.Init()
// Use the generated client stub
// 通过客户端的桩创建 go.micro.srv.hello 服务客户端
helloService := hello.NewHelloService("go.micro.srv.hello",service.Client())
// Make request
// 调用 RPC Call 方法
response, err := helloService.Call(context.Background(), &hello.Request{
Name: "aizws",
})
if err != nil {
log.Error(err)
return
}
// Print result
// 打印 RPC Call 调用结果
log.Info(response.Msg)
}
Go Micro 客户端,可以通过服务发现使用注册在 consul 的 RPC 微服务:
package main
import (
"context"
"github.com/micro/go-micro"
"github.com/micro/go-micro/registry"
"github.com/micro/go-plugins/registry/consul"
"github.com/micro/go-micro/util/log"
"hello/proto/hello"
)
func main() {
// 创建 consul 服务注册项,其中 192.168.3.25:2379 为 consul 服务地址。
// consul 服务地址按照实际情况填写
reg := consul.NewRegistry(registry.Addrs("192.168.3.25:2379"))
// Create a new service
// 创建一个新的服务,服务名为 go.micro.srv.hello
service := micro.NewService()
// Parse command line flags
// 使用服务注册插件初始化服务
service.Init(micro.Registry(reg))
// Use the generated client stub
// 通过客户端的桩创建 go.micro.srv.hello 服务客户端
helloService := hello.NewHelloService("go.micro.srv.hello",service.Client())
// Make request
// 调用 RPC Call 方法
response, err := helloService.Call(context.Background(), &hello.Request{
Name: "aizws",
})
if err != nil {
log.Error(err)
return
}
// Print result
// 打印 RPC Call 调用结果
log.Info(response.Msg)
}
Go Micro API 服务是对 SRV RPC服务的封装,它将请求装换为 RPC 请求转给 SRV RPC 服务,并将 SRV RPC 的处理结果返回客户端。我们可以使用 Go Micro 的 micro ...