rpc接口怎么写_rpcbind服务端口

rpc接口怎么写_rpcbind服务端口编写更安全的RPC接口前言在一般的RPC应用当中,作为开发人员一般分为了三种,第一种就是提供RPC服务的开发人员,第二种就是客户端使用RPC服务的开发人员,以及最重要的设计RPC接口和规范RPC接口的开发人员,前面的案例当中我们将三种角色融在了一起,虽然看起来非常的方便,但是非常的不利于后期的维护以及二次开发RPC接口规范如果要冲高HelloService服务,第一步需要明确服务的名字以及接口(HelloService服务在上两篇博客)constHelloServiceName=”path/to

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

编写更安全的RPC接口

前言

在一般的RPC应用当中,作为开发人员一般分为了三种,第一种就是提供RPC服务的开发人员,第二种就是客户端使用RPC服务的开发人员,以及最重要的设计RPC接口和规范RPC接口的开发人员,前面的案例当中我们将三种角色融在了一起,虽然看起来非常的方便,但是非常的不利于后期的维护以及二次开发

RPC接口规范

如果要冲高HelloService服务,第一步需要明确服务的名字以及接口(HelloService服务在上两篇博客)

const HelloServiceName="path/to/pkg.helloservice"
type HelloServiceInterFace = interface{ 
   
  Hello(request string,reply *string)error
}
func RegisterHelloService(svc HelloServiceinterface)error{ 
   
  return rpc.RegisterName(HelloServiceName,svc)
}

我们把RPC服务的接口规范分为三个部分:首先是服务的名称,然后时服务要实现的详细方法列表,最后时注册该类服务的函数。为了避免名字的冲突,我们在PRC无法的名字中增加了包路径前缀(这个是RPC服务抽象的包路径,并非完全等价于Go语言的包路径)。RegisterHelloService注册服务的时候,编译器会要求唇乳的对象满足HelloServiceInterface接口。

在定义了ROC服务接口的规范以后,客户端就可以更具规范编写RPC调用的接口了

func main(){ 
   
  client , err:=rpc.Dial("tcp","localhost:1234")
  if err !=nil{ 
   
    log.Fatal("dialing:",err)
  }
  var reply string
  err = client.Call(HelloServiceName+".Hello","hello",&reply)
  if err !=nil{ 
   
    log.Fatal(err)
  }
}

其中唯一的变化是client.Call()的第一个参数用HelloServiceName+”.Hello”代替了“HelloService.Hello”然而通过client.Call()函数调用RPC方法依然比较烦碎,同时参数的类型依然无法得到编译器提供的安全保障

为了简化客户端用户调用RPC函数,我们可以在接口规范部分增加对库护短的简单包装:

type HelloServiceClient struct{ 
   
  *rpc.Client
}
var _ HelloServiceInterface = (*HelloServiceClient)(nil)
func DialHelloService(network,address string)(*HelloServiceClient,error){ 
   
  c,err :=rpc.Dial(network,address)
  if err !=nil{ 
   
    return nil,err
  }
  return &HelloServiceClient{ 
   Client:c},nil
}

func (p *HelloServiceClient) Hello(request string,reply *string)error{ 
   
  return p.Client.Call(HelloServiceName+".Hello",request,reply)
}

我们在接口规范中针对客户新增加了HelloServiceClient类型,该类型也必须满足HelloServiceInterface接口,这样客户端用户就可以直接通过接口的方法调用RPC函数。

func main(){ 
   
  client,err :=DialHelloService("tcp,"lacalhost:1234") if err!=nil{ log.Fatal("dialing:",err) } var reply string err = client.Hello("hello",&repluy)
if err!=nil{ 
   
     log.Fatal(err)
	}
}

现在客户端用户不用再担心RPC方法名称或参数类型不匹配等低级错误的发生

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182552.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 功能测试用例编写_白盒测试用例

    功能测试用例编写_白盒测试用例测试用例分层每个测试用例都有1个或多个测试步骤(List[step]),每个测试步骤对应一个API请求或其他用例的引用。从上图分析,我们可以看到testsuite中包含了3个测试用例,testca

    2022年7月30日
    12
  • 视频列表

    视频列表

    2021年10月20日
    50
  • 流水线设计的概念_流水线原理

    流水线设计的概念_流水线原理流水线设计的概念它是面积换取速度思想的又一种具体现。所谓流水线设计实际上是把规模较大、层次较多的组合逻辑电路分为几个级,在每一级插入寄存器并暂存中间数据。流水线处理是提高组合逻辑设计的处理速度和吞吐量的常用手段。如果某个组合逻辑设计的处理流程可以分为若干步骤,而且整个数据处理过程是“单流向”的,即没有反馈或者迭代运算,前一个步骤的输出是下一个步骤的输入,则可以考虑采用流水线设计方法提高数据处理频率,即吞吐量。……

    2022年8月14日
    7
  • Zookeeper-Zab协议

    Zookeeper-Zab协议Zookeeper消息广播模式崩溃恢复机制选LeaderZAB协议用来保持数据一致性,主要有两种模式,第一是消息广播模式;第二是崩溃恢复模式除此之外我门还应该了解Leader的选出机制消息广播模式在zookeeper集群中数据副本的传递策略就是采用消息广播模式。ZAB协议中Leader等待follower的ACK反馈是指”只要半数以上的follower成功反馈即可,不需要收到全部follower反馈”;下图中展示了消息广播的具体流程图:zookeeper中消息广播的具体步骤如下:客户端发起一

    2022年8月8日
    7
  • vscode服务器浏览器打开html_vscode实时预览HTML

    vscode服务器浏览器打开html_vscode实时预览HTMLVscode默认是在控制台下查看html文件,对于我们查看和调试都很不方便,那如何在浏览器中打开呢?1.新建一个HTML文件2.点击左侧的扩展,打开扩展栏3.在扩展栏的搜索栏中输入openinbrowser,找到openinbrowser这款插件,点击右下角“安装”字样即可安装。因为我已经安装了,所以再搜索不会显示安装字样4.安装完成后可以看一下这款插件的扩展文档,里面有插…

    2022年8月21日
    33
  • PyCharm几个常用的快捷键「建议收藏」

    PyCharm几个常用的快捷键「建议收藏」咪哥杂谈本篇阅读时间约为3分钟。1前言PyCharm作为一款Python语言的代码编辑器,在市场上广为人知。尤其是一些工程性项目来说,PyCharm非常友好。实际上,如果你要是了…

    2022年8月29日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号