国外免费psd网站,wap盛唐建站,wordpress页面怎么用,已经有网站怎么做淘宝客服务发现
Registry 接口分为两个#xff0c;Registrar 为实例注册和反注册#xff0c;Discovery 为服务实例列表获取 创建一个 Discoverer 服务间的通信使用的grpc#xff0c;放到data层#xff0c;实现的是从uses服务调用orders服务 app/users/internal/data.go 加入 New…服务发现
Registry 接口分为两个Registrar 为实例注册和反注册Discovery 为服务实例列表获取 创建一个 Discoverer 服务间的通信使用的grpc放到data层实现的是从uses服务调用orders服务 app/users/internal/data.go 加入 NewDiscovery和 NewOrderServiceClient需要把新加的2个方法加入到 ProviderSet
需要把新生成的orderClient注入到Data里面 orderClient orders.OrderClient
package dataimport (contextgithub.com/go-kratos/kratos/contrib/registry/nacos/v2github.com/go-kratos/kratos/v2/loggithub.com/go-kratos/kratos/v2/middleware/recoverygithub.com/go-kratos/kratos/v2/registrygithub.com/go-kratos/kratos/v2/transport/grpcgithub.com/google/wiregithub.com/nacos-group/nacos-sdk-go/clientsgithub.com/nacos-group/nacos-sdk-go/common/constantgithub.com/nacos-group/nacos-sdk-go/vogorm.io/driver/mysqlgorm.io/gormtimexgs_kratos/gen/config/usersxgs_kratos/gen/orders
)// ProviderSet is data providers.
var ProviderSet wire.NewSet(NewData, NewDiscovery, CreateRegister, NewOrderServiceClient, NewUserRepo)// Data .
type Data struct {// TODO wrapped database clientdb *gorm.DBlog *log.HelperorderClient orders.OrderClient
}// NewData .func NewData(c *conf.Data, logger log.Logger, client orders.OrderClient) (*Data, func(), error) {cleanup : func() {log.NewHelper(logger).Info(closing the data resources)}db, err : gorm.Open(mysql.Open(c.Database.Source), gorm.Config{})if err ! nil {log.Fatalf(failed to connect database: %v, err)panic(err)}return Data{db: db,log: log.NewHelper(logger),orderClient: client,}, cleanup, nil
}// NewDiscovery 服务发现
func NewDiscovery(conf *conf.Data) registry.Discovery {sc : []constant.ServerConfig{{IpAddr: conf.Nacos.Addr,Port: conf.Nacos.Port,},}cc : constant.ClientConfig{NamespaceId: conf.Nacos.NamespaceId,TimeoutMs: 5000,}client, err : clients.NewNamingClient(vo.NacosClientParam{ClientConfig: cc,ServerConfigs: sc,},)if err ! nil {panic(err)}r : nacos.New(client)return r
}// NewOrderServiceClient orders 服务客户端
func NewOrderServiceClient(r registry.Discovery) orders.OrderClient {conn, err : grpc.DialInsecure(context.Background(),grpc.WithEndpoint(discovery:///orders-xgs.grpc),grpc.WithDiscovery(r),grpc.WithTimeout(time.Second*2),grpc.WithMiddleware(recovery.Recovery(),),)if err ! nil {panic(err)}c : orders.NewOrderClient(conn)return c
}在users下执行 wire
以ListUser方法为例子进行调用
app/users/internal/user.go
package dataimport (contextfmtgithub.com/go-kratos/kratos/v2/logxgs_kratos/app/users/internal/bizxgs_kratos/app/users/internal/data/dalxgs_kratos/gen/ordersxgs_kratos/gen/users
)//data 层处理数据的存储和读取type userRepo struct {data *Datalog *log.Helper
}// NewUserRepo . r registry.Discovery,
func NewUserRepo(data *Data, logger log.Logger) biz.UserRepo {return userRepo{data: data,log: log.NewHelper(logger),}
}// CreateUser 创建用户
func (r *userRepo) CreateUser(ctx context.Context, req *users.CreateUserRequest) (*users.CreateUserReply, error) {user : dal.UserMo{Age: req.Age,Name: req.Name,Email: req.Email,}result : r.data.db.Create(user)if result.Error ! nil {return nil, result.Error}return users.CreateUserReply{Id: user.Id,}, nil
}func (r *userRepo) ListUser(ctx context.Context, req *users.ListUserRequest) ([]*users.UserData, error) {//获取order服务的clientclient : r.data.orderClientorder, err : client.CreateOrder(ctx, orders.CreateOrderRequest{OrderNo: 1,})if err ! nil {return nil, err}fmt.Println(order)var results []dal.UserMores : r.data.db.Find(results)if res.Error ! nil {return nil, res.Error}var userDatas []*users.UserDatafor _, result : range results {userDatas append(userDatas, users.UserData{Id: result.Id,Name: result.Name,Age: result.Age,Email: result.Email,})}return userDatas, nil
}从新生成一下代码 buf generate 如果服务是分开部署的需要拿到对方的存根 proto 执行 kratos proto client xxx.proto生成client
分别启动users和orders 服务是都是注册成功的由于注册的是http和grpc所有后面拼接的有http和grpc调用的时候需要拼接上 postman请求看效果 看日志输出 users 再看orders服务的日志输出 项目的代码 码云 https://gitee.com/gebilaoxie/xgs_kratos.git