2.微服务--RPC

1.RPC简介

1.远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议。
2.该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。
3.如果涉及的软件采用面向对象编程,那么远程过程调用也可称为远程调用或远程方法调用。

2.流行的RPC框架的对比

3.golang中如何实现RPC

Golang中实现RPC比较简单,官方提供了封装好的库,还有第三方库。

官方库:net/rpc
1.net/rpc库使用encoding/gob进行编码
2.支持tcp和http数据传输方式
3.由于其他语言不支持gob编解码方式,所以golang的RPC只支持golang开发的服务端与客户端的交互

官方库:net/jsonrpc
1.jsonrpc采用JSON进行数据编解码,因而支持跨语言调用。
2.jsonrpc库是基于tcp协议实现的,暂不支持http传输方式。

golang的RPC必须符合四个条件才可以:
1.结构体字段首字母要大写,要跨域访问,所以大写。
2.函数名必须首字母大写。
3.函数第一个参数是接收参数,第二个参数是返回给客户端参数,必须是指针类型。
4.函数必须有一个返回值err。

3.1示例1

golang实现RPC程序,实现求矩形面积和周长
//rpcClient/server.go

package main

import (
    "log"
    "net/http"
    "net/rpc"
)

//服务端,求举行面积和周长

//声明矩形对象
type Rect struct {

}

//声明参数结构体,字段首字母大写
type Param struct {
    Width,Height int
}
//golang的RPC必须符合4个条件才可以
//? 结构体字段首字母要大写,要跨域访问,所以大写
//? 函数名必须首字母大写(可以序列号导出的)
//? 函数第一个参数是接收参数,第二个参数是返回给客户端参数,必须是指针类型
//? 函数必须有一个返回值error

//定义求矩形面积的方法
func (r Rect) Area(p Param,ret *int)  error{
    *ret = p.Width * p.Height
    return nil
}
//定义求矩形周长的方法
func (r Rect) Perimeter(p Param,ret *int)  error{
    *ret = (p.Width + p.Height)*2
    return nil
}

func main()  {
    //1.注册服务
    rect := new(Rect)
    rpc.Register(rect)
    //2.把服务处理绑定到http协议上
    rpc.HandleHTTP()
    //3.监听服务,等待客户端调用请求面积和周长的方法
    err := http.ListenAndServe(":8080",nil)
    if err != nil{
        log.Fatal(err)
    }
}
//rpcServer/client.go
package main

import (
    "fmt"
    "log"
    "net/rpc"
)

//声明参数结构体,字段首字母大写
type Params struct {
    Width,Height int
}
//调用服务
func main()  {
    //1.链接远程RPC服务
    rp,err := rpc.DialHTTP("tcp","127.0.0.1:8080")
    if err != nil{
        log.Fatal(err)
    }
    //2.调用远程方法
    //定义接收服务端传回来的计算结果的变量
    ret := 0
    //求矩形面积
    err2 := rp.Call("Rect.Area",Params{50,10},&ret)
    if err2 != nil{
        log.Fatal(err2)
    }
    fmt.Println("面积:",ret)

    //求矩形周长
    err3 := rp.Call("Rect.Perimeter",Params{50,10},&ret)
    if err3 != nil{
        log.Fatal(err3)
    }
    fmt.Println("周长:",ret)
}


原文地址:https://blog.51cto.com/10983441/2469860

时间: 2024-08-30 08:56:01

2.微服务--RPC的相关文章

微服务RPC框架选美

原文:http://p.primeton.com/articles/59030eeda6f2a40690f03629 1.RPC 框架谁最美? Hello,everybody!说到RPC框架,可能大家能想到一堆RPC开源框架,那么在微服务平台中,微服务间的服务调用,不可避免的会遇到一个问题,该选用哪一个RPC框架好呢?今天我们就请到三位RPC框架,来进行一场选美大赛,看看谁更适合微服务平台中的服务间调用. 大家好,我是Dubbo!我是阿里开源的分布式服务框架,最大的特点是按照分层的方式来架构,使

JAVA微服务架构视频教程

教程目录:┣━JAVA微服务架构视频教程┃ ┣━Java教程:第1章 微服务简介 4┃ ┃ ┣━Java教程:001构建单体应用┃ ┃ ┣━Java教程:002微服务解决复杂问题┃ ┃ ┣━Java教程:003微服务的优点┃ ┃ ┣━Java教程:004微服务的缺点┃ ┣━Java教程:第2章 Linux使用 19┃ ┃ ┣━Java教程:005Linux 简介┃ ┃ ┣━Java教程:006Linux 与 Windows 比较┃ ┃ ┣━Java教程:007安装 Linux┃ ┃ ┣━Java

企业级工作流解决方案(五)--微服务消息处理模型之客户端端处理

微服务的服务端已经启动起来了,服务消费者怎么知道服务在哪个地方,通过什么方式调用呢,分布式如何选择正确的服务器调用服务? 这个就涉及到服务发现.服务健康检查的问题了,很多微服务架构的做法都是通过消息队列来实现的,消息队列天生就支持发布订阅功能,服务有变化之后,发布通知,每个消费者更新状态,还涉及到更新服务的metadata信息,同时还涉及到服务健康检查等等一系列功能,其实这些地方是非常容易出问题的地方,但是对于规模流量不是特别巨大的企业,这部分职责可以进行转移,服务的发现就直接通过配置文件实现,

【微服务】- eurka构建与使用

目录 1.eureka基础知识 什么是服务治理 什么是服务注册与发现 Eureka包含两个组件: Eureka Server和Eureka Client 1.Eureka Server提供服务注册服务 2.EurekaClient通过注册中心进行访问 用例项目的构架 2.单机eureka的构建 注册一个简单的Eureka单机配置 1.建一个空工程工程 2.添加依赖 3.配置yml文件 4.写主启动类 5.运行 把服务注册到eureka上 1.先在服务pom文件中添加eureka的client依赖

腾讯正式对外开源高性能 RPC 开发框架与微服务平台Tars

Tars 是将腾讯内部使用的微服务架构 TAF(Total Application Framework)多年的实践成果总结而成的开源项目,目前已于4月10日正式对外开源. 作为支持多语言的高性能 RPC 开发框架和配套一体化的服务治理平台,Tars可以帮助企业或者用户以微服务的方式快速构建稳定可靠的分布式应用,它的设计灵感来源于采取分层思想,实现开发与运营之间的分离.目前该框架在腾讯内部,已经在 160 多个业务(如手机浏览器.应用宝.手机管家.手机QQ.手机游戏等).1.6 多万台服务器上运行

微服务实践之路--RPC

微服务实践之路--RPC 重点来了,本文全面阐述一下我们的RPC是怎么实现并如何使用的,跟Kubernetes和Openstack怎么结合. 在选型一文中说到我们选定的RPC框架是Apache Thrift,它的用法是在Main方法中重启服务,在Client端连接服务去调用, 而我的想法是要跟Dubblo.HSF的用法一样,因为很多人都熟习这两个框架的用法,特别是我们好几个项目都是基于EDAS开发的,而且世面上用Dubbo的公司也很多. 顺便再说一下我们对于RPC的几点要求: 1,兼容Dubbo

【架构】linkerd:来自Twitter为微服务而生的开源RPC解决方案

大家要如何以规模化方式运维微服务应用程序?实践当中会出现哪些问题,我们又该如何加以解决?在大规模与非预测性工作负载场景当中,我们需要满足哪些条件才能运行一款大型微服务应用程序,而又能够确保不必受到功能发布或者产品变更的影响? 在围绕微服务展开的探讨当中,我们发现几乎很少有人能够切实回答上述问题.以Docker.Mesos.Kubernetes以及gRPC为代表的各类新型技术成果的快速崛起使得我们能够轻松建立小型新架构.然而,高流量生产性用例又该如何实现?根据我们的推算,目前能够以规模化方式运行微

应用架构的演进--MVC,RPC,SOA,微服务架构

MVC架构:垂直应用架构 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率. 当业务规模很小时,将所有功能都部署在同一个进程中,通过双机或者前置负载均衡器实现负载分流 此时,加速前端页面开发,分离前后台逻辑的mvc框架是关键. 代表技术:Struts2.SpringMVC.Spring.Mybatis 等等. RPC架构:分布式服务架构 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用

MVC、RPC、SOA、微服务架构之间的区别

MVC.RPC.SOA.微服务架构之间的区别 一.MVC架构 其实MVC架构就是一个单体架构. 代表技术:Struts2.springMVC.Spring.Mybatis 等等. 二.RPC架构 RPC(Remote Procedure Call)远程过程调用,他是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. 代表技术:Thrift.Hessian等等. 三.SOA架构 SOA(Service Oriented Architecture)面向服务架构. ESB(Ent