Consul
- 定义Consul配置
configs/register.yaml
consul:
address: 192.168.0.158
schema: http
health_check: false
- conf层添加consul配置之后重新生成conf配置:
make config
conf/conf.proto
message Server {
message HTTP {
string network = 1;
string addr = 2;
google.protobuf.Duration timeout = 3;
}
message GRPC {
string network = 1;
string addr = 2;
google.protobuf.Duration timeout = 3;
}
message Consul {
string addr = 1;
string schema = 2;
bool healthChech = 3;
}
HTTP http = 1;
GRPC grpc = 2;
Consul consul = 3;
}
- server层定义:
server/register.go
package server
import (
"github.com/go-kratos/kratos/contrib/registry/consul/v2"
"github.com/go-kratos/kratos/v2/registry"
consulAPI "github.com/hashicorp/consul/api"
"kratos-casbin/app/admin/internal/conf"
)
func NewRegistrar(conf *conf.Registry) registry.Registrar {
c := consulAPI.DefaultConfig()
c.Address = conf.Consul.Address
c.Scheme = conf.Consul.Scheme
cli, err := consulAPI.NewClient(c)
if err != nil {
panic(err)
}
r := consul.New(cli, consul.WithHealthCheck(conf.Consul.HealthCheck))
return r
}
- 注入依赖之后重新生成wire:
make generate
server/server.go
package server
import (
"github.com/google/wire"
)
// ProviderSet is server providers.
var ProviderSet = wire.NewSet(NewHTTPServer, NewRegistrar)
- 注入口添加配置
cmd/xxx/main.go
func newApp(
logger log.Logger,
gs *grpc.Server,
hs *http.Server,
reg registry.Registrar, // 从server层作为依赖注入
) *kratos.App {
return kratos.New(
kratos.ID(id),
kratos.Name(Name),
kratos.Version(Version),
kratos.Metadata(map[string]string{}),
kratos.Logger(logger),
kratos.Server(
gs,
hs,
),
kratos.Registrar(reg), // 注册到Consul
)
}
func main(){
// 添加配置信息
var rc conf.Registry
if err := c.Scan(&rc); err != nil {
panic(err)
}
// 注入到wire
app, cleanup, err := wireApp(bc.Server,&rc, bc.Data, logger)
}
- wire
func wireApp(*conf.Server, *conf.Registry, *conf.Data, log.Logger) (*kratos.App, func(), error) {
panic(wire.Build(server.ProviderSet, data.ProviderSet, biz.ProviderSet, service.ProviderSet, newApp))
}