首页 > 其他分享 >Go实战全家桶之二十:GO RPC CLIENT聚合

Go实战全家桶之二十:GO RPC CLIENT聚合

时间:2024-11-26 22:30:48浏览次数:5  
标签:return string CLIENT client RPC GorpcCli func GO com

package client

import (
    "git.ichub.com/general/webcli120/goconfig/base/basedto"
    "git.ichub.com/general/webcli120/goconfig/gogrpc/gorpcclient"
    proto "website-grpc/gorpc/proto/hello"
    websiteproto "website-grpc/gorpc/proto/website"
)

const RPC_SERVER_NAME = "gorpc.website.com"

type RpcFacade struct {
    basedto.BaseEntitySingle
    RPC_SERVER_NAME string

    HelloService   *gorpcclient.GorpcCli[proto.HelloYeahService]
    WebsiteService *gorpcclient.GorpcCli[websiteproto.WebsiteService]
}

func NewRpcFacade() *RpcFacade {
    var f = &RpcFacade{
       RPC_SERVER_NAME: RPC_SERVER_NAME,
    }
    f.Init()
    return f
}
func (self *RpcFacade) Init() {
    self.HelloService = gorpcclient.NewGorpcCli(self.RPC_SERVER_NAME, proto.NewHelloYeahService)
    self.WebsiteService = gorpcclient.NewGorpcCli(self.RPC_SERVER_NAME, websiteproto.NewWebsiteService)

}
测试
package gorpcclient

import (
    "git.ichub.com/general/webcli120/goconfig/gogrpc/common"
    "github.com/micro/go-micro/v2/client"
    "github.com/sirupsen/logrus"
    "sync"
)
func Test001_helloSayhello(t *testing.T) {

    var req = &protoHello.HelloRequest{}
    req.Age = 46
    req.Name = "leijmdas@163.com"

    ctx, _ := context.WithTimeout(context.Background(), 30*time.Second)
    var meta = gometadata.FindBeanIchubMetadata()
    meta.Data = ichubconfig.FindBeanIchubConfig().ReadIchubWebServer()
    ctx = gometadata.FindBeanGoMetadata().Set(ctx, meta)
    var res, err = FindBeanRpcFacade().HelloService.RpcClient().SayHello(ctx, req)
    logrus.Info(err, basemodel.AdapterFrom(res))

}

INFO[2024-11-1126 22:23:29]C:/Users/admin/go/pkg/mod/git.ichub.com/general/webcli120@v1.0.994-dev-05/goconfig/basedi/bean_info.go:25 git.ichub.com/general/webcli120/goconfig/basedi.(*BeanInfo).CreateBean() you new a single bean :RpcFacade             
INFO[2024-11-1126 22:23:29]D:/gitlab.ichub.com/general-website/website-grpc/gorpc/client/rpc_facade_test.go:29 website-grpc/gorpc/client.Test001_helloSayhello() <nil> {
     "msg": "46",
     "msg2": "leijmdas@163.com"

--- PASS: Test001_helloSayhello (0.06s)

实现细节

type GorpcCli[S any] struct {
    rpcClient      S
    RpcServiceName string

    FuncNew func(name string, c client.Client) S
}

func (g *GorpcCli[S]) RpcClient() S {
    return g.rpcClient
}

func DefaultOf[S any](rpcServiceName string, funcNew func(name string, c client.Client) S) *GorpcCli[S] {
    var rpcli = Default[S](rpcServiceName)

    rpcli.init(funcNew)
    return rpcli
}
func NewGorpcCli[S any](rpcServiceName string, funcNew func(name string, c client.Client) S) *GorpcCli[S] {

    return DefaultOf[S](rpcServiceName, funcNew)
}
func Default[S any](rpcServiceName string) *GorpcCli[S] {
    return &GorpcCli[S]{
       RpcServiceName: rpcServiceName,
    }

}

func (g *GorpcCli[S]) init(funcNew func(name string, c client.Client) S) *GorpcCli[S] {
    if common.Client() == nil {
       logrus.Error("client is nil")
       return nil
    }
    g.rpcClient = funcNew(g.RpcServiceName, *common.Client())

    return g
}

func (g *GorpcCli[S]) SetRpcClient(rpcClient S) {
    g.rpcClient = rpcClient
}

标签:return,string,CLIENT,client,RPC,GorpcCli,func,GO,com
From: https://blog.csdn.net/leijmdas/article/details/144069677

相关文章

  • Go的数组
    Go的数组Array数组介绍数组是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),这种类型可以是意的原始类型,比如int、string等,也可以是用户自定义的类型。一个数组包含的元素个数被称为数组的长度。在Golang中数组是一个长度固定的数据类型,数组的长......
  • Go的切片
    Go的切片为什么要使用切片切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。切片是一个引用类型,它的内部结构包含地址、长度和容量。声明切片类型的基本语法如下:varname[]T其中:name:表示变量名T:表示切......
  • COMP4134 Algorithms and Data Structures
    ProjectinAdvancedAlgorithmsandDataStructuresCOMP4134UNNCOverviewForthisproject,youaretaskedwithsolvingareal-worldtransportationproblem.Formallyspeaking,itiscalledthepickupanddeliveryproblemwithtimewindows(PDPTW).Thepi......
  • Django框架--ORM操作
    1.查询操作1.1filter()用法:用于过滤查询结果,返回符合条件的记录。支持链式调用。示例:queryset=MyModel.objects.filter(field=value)SQL查询示例:SELECT*FROMMyModelWHEREfield=value;性能特点:根据过滤条件生成SQL查询。支持复杂查询条件,性能取决于查询条件和索引。1......
  • DJANGO进阶:信号机制
    django信号是一种机制,允许你在特定事件发生时(不需要再次修改"特定事件"的代码),执行另一部分的代码逻辑意义:类似于装饰器的作用,可以在不修改现有代码的逻辑下,触发自定义逻辑常见用途数据变更通知:当模型实例被创建、更新或删除时发送信号用户注册/登录:在用户注册或登录......
  • Django框架--中间件
    一、介绍1.中间件的定义Django中间件是一个轻量级、底层的“插件”系统,用于全局地修改Django的输入或输出。每个中间件组件可以对请求进行处理或对响应进行处理,或者同时处理二者。2.中间件的功能中间件可以执行的操作包括:请求预处理:在视图函数处理请求之前,执行一些前置操作(如......
  • 【速通GO】基础结构和语法
    独立站原文基础结构以及执行方式基础结构//包名packagemain//引入包import"fmt"//main函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有init()函数则会先执行该函数//注意{不能单独放在一行,否则在运行时会产生错误func......
  • Go语言基本数据类型和运算符
    1.Go语言基本数据类型和运算符Go语言是静态编程语言。在Go语言中,数据类型用于声明函数和变量。当编译器编译Go程序时,通过某个值的数据类型,编译器就能够知晓要为这个值分配多大内存。值被存储在指定大小的内存中后,就可以通过算术、关系、逻辑等运算符对其进行计算。1.1Go语言变......
  • OpenEuler安装MongoDB并配置访问密码
    1.下载MongoDB、安装wgethttps://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-4.4.18.tgztarzxvfmongodb-linux-x86_64-rhel80-4.4.18.tgz移动到/home路径下mvmongodb-linux-x86_64-rhel80-4.4.18/homecd/homemvmongodb-linux-x86_64-rhel80-4.4.1......
  • go-resty学习记录
    一.go-resty一个优秀的HTTP客户端库go-resty是一个优秀的HTTP客户端库,支持链式调用,超时控制,TLS,Cookie管理,链接池,代理,支持多种认证方式包括基本认证和OAuth2.0,支持发送JSON、XML和URL编码的数据,文件上传和下载,支持发送大量请求并批量处理响应结果,同时提供......