参考 https://developer.hashicorp.com/consul/downloads
参见 go-zero 官网 https://go-zero.dev/cn/docs/quick-start/micro-service/
go get -u github.com/zeromicro/zero-contrib/zrpc/registry/consul
Name: mall.rpc
ListenOn: 0.0.0.0:8080
Consul:
Host: 127.0.0.1:8500
Key: card.rpc
Meta:
Protocol: grpc
Tag:
- card
- rpc
import (
"github.com/zeromicro/go-zero/zrpc"
"github.com/zeromicro/zero-contrib/zrpc/registry/consul"
)
type Config struct {
zrpc.RpcServerConf
Consul consul.Conf
}
import (
"flag"
"fmt"
"wlwkgo/card/rpc/internal/config"
"wlwkgo/card/rpc/internal/server"
"wlwkgo/card/rpc/internal/svc"
"wlwkgo/card/rpc/types/card"
"github.com/zeromicro/go-zero/core/conf"
"github.com/zeromicro/go-zero/core/service"
"github.com/zeromicro/go-zero/zrpc"
"github.com/zeromicro/zero-contrib/zrpc/registry/consul"
_ "github.com/zeromicro/zero-contrib/zrpc/registry/consul"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
)
var configFile = flag.String("f", "etc/card.yaml", "the config file")
func main() {
flag.Parse()
var c config.Config
conf.MustLoad(*configFile, &c)
ctx := svc.NewServiceContext(c)
s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) {
card.RegisterCardServer(grpcServer, server.NewCardServer(ctx))
if c.Mode == service.DevMode || c.Mode == service.TestMode {
reflection.Register(grpcServer)
}
})
_ = consul.RegisterService(c.ListenOn, c.Consul) //注册consul
defer s.Stop()
fmt.Printf("Starting rpc server at %s...\n", c.ListenOn)
s.Start()
}
import _ "github.com/zeromicro/zero-contrib/zrpc/registry/consul"
MallRpc:
Target: consul://127.0.0.1:8500/mall.rpc?wait=14s
这里以rpc配置示例
Name: card.rpc
ListenOn: 0.0.0.0:8080
Consul:
Host: 127.0.0.1
Key: card.rpc
Meta:
Protocol: grpc
Tag:
- card
- rpc
Mysql:
DataSource: $user:$password@tcp($IP)/$DB?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai
CacheRedis:
- Host: 127.0.0.1
Pass:
Type: node
import (
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/zrpc"
"github.com/zeromicro/zero-contrib/zrpc/registry/consul"
)
type Config struct {
zrpc.RpcServerConf
Consul consul.Conf
Mysql struct {
DataSource string
}
CacheRedis cache.CacheConf
}
import (
"flag"
"fmt"
"log"
"wlwkgo/card/rpc/internal/config"
"wlwkgo/card/rpc/internal/server"
"wlwkgo/card/rpc/internal/svc"
"wlwkgo/card/rpc/types/card"
"github.com/hashicorp/consul/api"
"github.com/zeromicro/go-zero/core/conf"
"github.com/zeromicro/go-zero/core/logx"
"github.com/zeromicro/go-zero/core/service"
"github.com/zeromicro/go-zero/zrpc"
"github.com/zeromicro/zero-contrib/zrpc/registry/consul"
_ "github.com/zeromicro/zero-contrib/zrpc/registry/consul"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
)
var configFile = flag.String("f", "etc/card.yaml", "the config file")
func main() {
flag.Parse()
var c config.Config
//conf.MustLoad(*configFile, &c)
LoadConsulConf("mall", &c)
log.Print(c)
ctx := svc.NewServiceContext(c)
s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) {
card.RegisterCardServer(grpcServer, server.NewCardServer(ctx))
if c.Mode == service.DevMode || c.Mode == service.TestMode {
reflection.Register(grpcServer)
}
})
_ = consul.RegisterService(c.ListenOn, c.Consul)
defer s.Stop()
fmt.Printf("Starting rpc server at %s...\n", c.ListenOn)
s.Start()
}
func LoadConsulConf(key string, v interface{}) {
client, _ := api.NewClient(&api.Config{Address: "http://127.0.0.1:8500"})
kv := client.KV()
data, _, err := kv.Get(key, nil)
log.Print(string(data.Value))
conf.LoadConfigFromYamlBytes(data.Value, v)
logx.Must(err)
}