概述
此次实战采用etcd做服务发现注册中心。
初始化项目
go mod init gomicro-demo2
创建服务端
micro new --type="service" hello
删除go.mod文件,跟客户端进行统一管理。
package main
import (
"github.com/micro/go-micro/v2"
log "github.com/micro/go-micro/v2/logger"
"github.com/micro/go-micro/v2/registry"
"github.com/micro/go-micro/v2/registry/etcd"
"gomicro-demo2/hello/handler"
"gomicro-demo2/hello/subscriber"
hello "gomicro-demo2/hello/proto/hello"
)
func main() {
// New Service
service := micro.NewService(
micro.Name("go.micro.service.hello"),
micro.Version("latest"),
micro.Registry(etcd.NewRegistry(registry.Addrs("127.0.0.1:2379"))),
)
// Initialise service
service.Init()
// Register Handler
hello.RegisterHelloHandler(service.Server(), new(handler.Hello))
// Register Struct as Subscriber
micro.RegisterSubscriber("go.micro.service.hello", service.Server(), new(subscriber.Hello))
// Run service
if err := service.Run(); err != nil {
log.Fatal(err)
}
}
编译proto文件
protoc --micro_out=. --go_out=. hello.proto
创建客户端
micro new --type="web" web
删除go.mod文件,跟服务端进行统一管理。
package main
import (
log "github.com/micro/go-micro/v2/logger"
"github.com/micro/go-micro/v2/registry"
"github.com/micro/go-micro/v2/registry/etcd"
"github.com/micro/go-micro/v2/web"
"gomicro-demo2/web/handler"
"net/http"
)
func main() {
// create new web service
service := web.NewService(
web.Name("go.micro.web.web"),
web.Version("latest"),
web.Address(":7799"),
web.Registry(etcd.NewRegistry(registry.Addrs("127.0.0.1:2379"))),
)
// initialise service
if err := service.Init(); err != nil {
log.Fatal(err)
}
// register html handler
service.Handle("/", http.FileServer(http.Dir("/GoCode/src/Go/GoMicro/day7/web/html")))
// register call handler
service.HandleFunc("/web/call", handler.WebCall)
// run service
if err := service.Run(); err != nil {
log.Fatal(err)
}
}
修改web/handler/handler.go,hello/handler/hello.go,main.go,subscriber/hello.go中的包路径
web/handler/hello.go
web/main.go
启动服务端
启动客户端
查看服务列表
micro --registry etcd --registry_address 127.0.0.1:2379 list services
开启web面板
micro --registry=etcd --registry_address=127.0.0.1:2379 web
测试服务是否正常
开启API网关,访问服务
micro --registry etcd --registry_address 127.0.0.1:2379 api --namespace=go.micro --type=service
其中: hello是服务名,Hello.Call是方法名
流程分析