首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SOFARPC源码解析-搭建环境

    简介摘要 SOFA 是蚂蚁金服自主研发的金融级分布式中间件,包含构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics监控度量,分布式高可用消息队列,分布式事务框架,分布式数据库代理层等组件,是一套分布式架构的完整的解决方案,也是在金融场景里锤炼出来的最佳实践。 SOFARPC是蚂蚁金服开源的高可扩展性、高性能、生产级的Java RPC框架。SOFARPC致力于简化应用之间的RPC调用,为应用提供方便透明、稳定高效的点对点远程服务调用方案。为了用户和开发者方便的进行功能扩展,SOFARPC提供丰富的模型抽象和可扩展接口,包括过滤器、路由、负载均衡等等。 SOFARPC功能特性:(1)透明化、高性能的远程服务调用;(2)支持多种服务路由及负载均衡策略;(3)支持多种注册中心的集成;(4)支持多种协议;(5)支持同步、单向、回调、泛化等多种调用方式;(6)支持集群容错、服务预热、自动故障隔离;(7)强大的扩展功能,可以按需扩展各个功能组件。 SOFARPC Github:https://github.com/alipay/sofa-rpc 架构设计 SOFARPC从下到上分为两层:核心层:包含RPC 的核心组件(例如我们的各种接口、API、公共包)以及一些通用的实现(例如随机等负载均衡算法)。功能实现层:所有的功能实现层的用户都是平等的,都是基于扩展机制实现的。

    02

    go实现json格式的rpc服务

    //JSON RPC 方式 //jsonrpc方式是数据编码采用了json,而不是gob编码。 package main import ( "log" "net" "net/rpc" "net/rpc/jsonrpc" ) //注意字段必须是导出 type Params struct { Width, Height int } type Rect struct{} func (r *Rect) Area(p Params, ret *int) error { *ret = p.Width * p.Height return nil } func (r *Rect) Perimeter(p Params, ret *int) error { *ret = (p.Width + p.Height) * 2 return nil } func chkError(err error) { if err != nil { log.Fatal(err) } } func main() { rect := new(Rect) //注册rpc服务 rpc.Register(rect) //获取tcpaddr tcpaddr, err := net.ResolveTCPAddr("tcp4", "127.0.0.1:8080") chkError(err) //监听端口 tcplisten, err2 := net.ListenTCP("tcp", tcpaddr) chkError(err2) for { conn, err3 := tcplisten.Accept() if err3 != nil { continue } //使用goroutine单独处理rpc连接请求 //这里使用jsonrpc进行处理 go jsonrpc.ServeConn(conn) } } //客户端 package main import ( "fmt" "log" "net/rpc/jsonrpc" ) type Params struct { Width, Height int } func main() { //连接远程rpc服务 //这里使用jsonrpc.Dial rpc, err := jsonrpc.Dial("tcp", "127.0.0.1:8080") if err != nil { log.Fatal(err) } ret := 0 //调用远程方法 //注意第三个参数是指针类型 err2 := rpc.Call("Rect.Area", Params{30, 100}, &ret) if err2 != nil { log.Fatal(err2) } fmt.Println(ret) err3 := rpc.Call("Rect.Perimeter", Params{30, 100}, &ret) if err3 != nil { log.Fatal(err3) } fmt.Println(ret) }

    03
    领券