服务注册
所有的开发语言默认只支持ETCD为注册中心,如果使用其他的注册中心,请自行实现方法(参考etcd)
初始化
/internal/data/core.go
go
package data
import (
"github.com/google/wire"
etcd "github.com/lhdhtrc/etcd-go/pkg"
"go-layout/internal/biz"
"go-layout/internal/conf"
clientv3 "go.etcd.io/etcd/client/v3"
"gorm.io/gorm"
)
var ProviderSet = wire.NewSet(NewData, NewDemoRepo)
type Data struct {
Etcd *clientv3.Client
}
func NewData(bc *conf.BootstrapConf, dc *conf.DataConf) (*Data, error) {
etcdCli, ee := etcd.New(dc.Etcd)
if ee != nil {
return nil, ee
}
return &Data{
Etcd: etcdCli,
}, nil
}rust
// 开发中dart
// 开发中kotlin
// 开发中swift
// 开发中node
// 开发中php
// 开发中python
// 开发中注册中心
/internal/server/register.go
go
package server
import (
"fmt"
micro "github.com/lhdhtrc/micro-go/pkg/core"
"github.com/lhdhtrc/micro-go/pkg/etcd"
demo "go-layout/dep/protobuf/gen/acme/demo/v1"
"go-layout/internal/conf"
"go-layout/internal/data"
"google.golang.org/grpc"
)
func NewRegisterServer(bc *conf.BootstrapConf, d *data.Data) (micro.Register, error) {
return etcd.NewRegister(d.Etcd, bc.Micro)
}
func NewRegisterCenterRepo(mr micro.Register) []*grpc.ServiceDesc {
raw := []*grpc.ServiceDesc{
&demo.DemoService_ServiceDesc,
}
if errs := micro.NewRegisterService(raw, mr); len(errs) != 0 {
fmt.Println(errs)
}
return raw
}rust
// 开发中dart
// 开发中kotlin
// 开发中swift
// 开发中node
// 开发中php
// 开发中python
// 开发中注册实例
/cmd/server/app
go
package main
import (
"fmt"
micro "github.com/lhdhtrc/micro-go/pkg/core"
"go.uber.org/zap"
"google.golang.org/grpc"
"net"
)
type App struct {
Listener net.Listener
GrpcServer *grpc.Server
Register micro.Register
Services []*grpc.ServiceDesc
Logger *zap.Logger
}
func (ist *App) Start() {
if err := ist.GrpcServer.Serve(ist.Listener); err != nil {
panic(err)
}
}
func (ist *App) Stop() {
ist.GrpcServer.Stop()
}
func NewApp(nl net.Listener, gs *grpc.Server, register micro.Register, services []*grpc.ServiceDesc, logger *zap.Logger) *App {
register.WithRetryBefore(func() {
fmt.Println("重试之前的函数")
})
register.WithRetryAfter(func() {
micro.NewRegisterService(services, register)
go register.SustainLease()
fmt.Println("重试之后的函数")
})
go register.SustainLease()
return &App{
Listener: nl,
GrpcServer: gs,
Register: register,
Services: services,
Logger: logger,
}
}rust
// 开发中dart
// 开发中kotlin
// 开发中swift
// 开发中node
// 开发中php
// 开发中python
// 开发中