当前位置: 首页> 科技> 数码 > 深圳工程交易中心官网_公司网页设计文案_永久免费自助建站平台_360网站seo手机优化软件

深圳工程交易中心官网_公司网页设计文案_永久免费自助建站平台_360网站seo手机优化软件

时间:2025/9/13 17:45:53来源:https://blog.csdn.net/hzether/article/details/145483361 浏览次数:0次
深圳工程交易中心官网_公司网页设计文案_永久免费自助建站平台_360网站seo手机优化软件

概述

GoFrame 框架提供了丰富的微服务组件和易用的 GRPC 脚手架模块。脚手架由 grpcx 社区包实现,包含多个核心模块。

服务端 (Server)

基本使用

服务端由 grpcx.Server 模块维护,用于创建和管理服务端对象。

package mainimport ("github.com/gogf/gf/contrib/rpc/grpcx/v2""github.com/gogf/gf/example/rpc/grpcx/basic/controller"
)func main() {s := grpcx.Server.New()controller.Register(s)s.Run()
}

注意事项

  • 服务端创建通常结合配置文件使用
  • 推荐查看服务端配置章节获取更多详细信息

客户端 (Client)

基本使用

客户端由 grpcx.Client 模块维护,用于创建和管理客户端对象。

package mainimport ("github.com/gogf/gf/contrib/rpc/grpcx/v2""github.com/gogf/gf/example/rpc/grpcx/basic/protobuf""github.com/gogf/gf/v2/frame/g""github.com/gogf/gf/v2/os/gctx"
)func main() {var (ctx    = gctx.New()conn   = grpcx.Client.MustNewGrpcClientConn("demo")client = protobuf.NewGreeterClient(conn))res, err := client.SayHello(ctx, &protobuf.HelloRequest{Name: "World"})if err != nil {g.Log().Error(ctx, err)return}g.Log().Debug(ctx, "Response:", res.Message)
}

重要提示

  • 大多数场景下,服务间通信使用服务名称
  • 建议复用 Client 对象,而非每次都创建新对象
    • 提高效率
    • 降低资源使用
    • 对 GC 更友好

上下文管理 (Ctx)

grpcx.Ctx 模块用于实现客户端与服务端之间的自定义数据传递。

常用方法

  • NewIncoming(ctx context.Context, data ...g.Map) context.Context
  • NewOutgoing(ctx context.Context, data ...g.Map) context.Context
  • IncomingToOutgoing(ctx context.Context, keys ...string) context.Context
  • IncomingMap(ctx context.Context) *gmap.Map
  • OutgoingMap(ctx context.Context) *gmap.Map

使用示例

// 客户端:设置传出数据
ctx := grpcx.Ctx.NewOutgoing(gctx.New(), g.Map{"UserId":   "1000","UserName": "john",
})// 服务端:接收传入数据
m := grpcx.Ctx.IncomingMap(ctx)
g.Log().Infof(ctx, `incoming data: %v`, m.Map())

数据传递特点

  • Outgoing:客户端将要传递给服务端的自定义数据
  • Incoming:服务端接收到的客户端数据
  • 包含框架内置信息,如链路跟踪、客户端版本等

负载均衡 (Balancer)

grpcx.Balancer 模块管理多服务端地址的请求策略。

默认策略

  • 默认使用轮询策略
  • 可通过 grpcx.Balancer.WithRandom() 等方法自定义策略

随机策略示例

conn := grpcx.Client.MustNewGrpcClientConn("demo", grpcx.Balancer.WithRandom())

服务注册发现 (Resolver)

grpcx.Resolver 模块用于解析服务名称。

默认实现

  • 默认使用本地文件系统(仅用于测试)
  • 生产环境推荐使用 etcd、consul 等组件

etcd 注册示例

// 服务端
grpcx.Resolver.Register(etcd.New("127.0.0.1:2379"))// 客户端
grpcx.Resolver.Register(etcd.New("127.0.0.1:2379"))
conn := grpcx.Client.MustNewGrpcClientConn("demo")

最佳实践

  1. 复用 Client 对象
  2. 选择合适的注册发现组件
  3. 利用上下文传递自定义数据
  4. 根据需求选择负载均衡策略

结论

GoFrame 的微服务脚手架提供了灵活、高效的微服务开发工具,支持多种服务治理特性,帮助开发者快速构建可靠的分布式系统。

关键字:深圳工程交易中心官网_公司网页设计文案_永久免费自助建站平台_360网站seo手机优化软件

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: