RPCX简介以及正常的RPC流程

一. 什么是 RPCX

RPCX 是一个类似于阿里巴巴 Dubbo 和微博 Motan 的分布式的基于Go语言的 RPC 框架,其支持 Zookepper、Etcd、Consul 等多种服务发现方式,多种服务路由方式, 是目前性能最好的 RPC 框架之一。RPCX官方文档

RPC 全称为 Remote Procedure Call——远程过程调用。

二. 正常的服务调用过程

如下图所示:

具体为:

  1. 客户端 Client 发起服务调用请求;
  2. Client Stub 可以理解成一个代理,会将调用方法、参数按照一定格式进行封装,通过服务提供的地址,发起网络请求;
  3. 消息通过网络传输到服务端;
  4. Server Stub 接受来自 Socket 的消息;
  5. Server Stub 将消息进行解包、告诉服务端调用的哪个服务,参数是什么;
  6. 结果返回给 Server Stub;
  7. Server Stub 把结果进行打包交给 Socket;
  8. Socket 通过网络传输消息;
  9. Client Slub 从 Socket 拿到消息;
  10. Client Stub 解包消息将结果返回给 Client。

一个 RPC 框架就是把步骤 2 至步骤 9 都封装起来。

三. 为什么需要 RPC

  1. RPC 可以用 HTTP 协议实现,并且用 HTTP 是建立在 TCP 之上最广泛使用的 RPC,相比于 HTTP 协议,RPC 采用二进制字节码传输,更加高效也更加安全。
  2. 微服务是一种趋势,服务之间通信目前有两种方式,RPC 就是其中一种,RPC 可以保证不同服务之间的互相调用,即使是跨语言跨平台也不是问题,让构建分布式系统更加容易。
  3. RPC 框架都会有服务降级、流量控制的功能,保证服务的高可用。

四. RPCX 的特点

  1. 基于 Net/RPC,可以将 Net/RPC 实现的 RPC 项目轻松的转换为分布式的 RPC。
  2. 插件式设计,可以配置所需的插件,比如服务发现、日志、统计分析等。
  3. 基于 TCP 长连接,只需很小的额外的消息头。
  4. 支持多种编解码协议,如 Gob、Json、MessagePack、Gencode、ProtoBuf 等。
  5. 服务发现:服务发布、订阅、通知等,支持多种发现方式如 ZooKeeper、Etcd 等。
  6. 高可用策略:支持四种调用失败模式:Failfast、Failover、Failtry、Failbackup。
  7. 负载均衡随机选取、顺序选取、一致性哈希、基于权重的选取、基于网络质量的选取、就近选取等多种负载均衡方式。
  8. 规模可扩展,可以根据性能的需求增减服务器。
  9. 其他:调用统计、访问日志等。
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我们来编写一个简单的rpcx客户端来调用我们在之前创建的服务。在终端中,进入一个新的文件夹并创建一个名为`client.go`的新文件。在此文件中,我们将实现调用服务的代码。 ``` package main import ( "context" "fmt" "github.com/smallnest/rpcx/client" ) func main() { d := client.NewPeer2PeerDiscovery("tcp@localhost:8972", "") xclient := client.NewXClient("MyService", client.Failtry, client.RandomSelect, d, client.DefaultOption) defer xclient.Close() var reply string err := xclient.Call(context.Background(), "SayHello", "World", &reply) if err != nil { fmt.Printf("failed to call: %v", err) return } fmt.Printf("Got reply: %s", reply) } ``` 在这个例子中,我们创建了一个名为`xclient`的rpcx客户端并使用`NewPeer2PeerDiscovery()`方法指定服务的地址。我们还使用`NewXClient()`方法创建了一个客户端实例,并将我们的服务名称传递给它。最后,我们使用`Call()`方法调用服务的`SayHello`方法,并将“World”作为参数传递。调用完成后,我们将打印服务返回的响应。 现在我们已经编写了一个简单的rpcx客户端,让我们编译并运行它。在终端中运行以下命令: ``` go build && ./client ``` 如果一切正常,你应该会看到以下输出: ``` Got reply: Hello, World! ``` 这就是使用rpcx调用服务的基本步骤。当然,rpcx还有很多高级功能,例如负载均衡、服务发现和客户端重试等。你可以查看rpcx的文档以了解更多信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值