golang入门学习--微服务2.0:认识微服务 RPC简介go实现RPC

golang入门学习--微服务2.0:认识微服务 RPC简介go实现RPC,第1张

目录 一、认识微服务?1、什么是微服务?2、微服务的特点3.微服务的不足 二、RPC简介1、什么是RPC? 二、go实现RPC

一、认识微服务? 1、什么是微服务?

使用一套小服务来开发单个应用的方式,每个服务运行在独立的进程里,一般采用轻量级的通讯机制互联,并且它们可以通过自动化的方式部署

2、微服务的特点 单一职责轻量级通信独立性迭代开发 3.微服务的不足 运维成本高接口成本高业务分类困难保证数据一致性 二、RPC简介 1、什么是RPC?

是一个计算机通信协议
该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程

二、go实现RPC

golang中实现RPC非常简单,官方提供了封装好的库,还有一些第三方的库。golang官方的net/rpc库使用encoding/gob进行编解码,支持tcphttp数据传输方式,由于其他语言不支持gob编解码方式,所以golang的RPC,只支持golang开发的服务器与客户端之间的交。官方还提供了net/rpc/jsonrpc库实现RPC方法,jsonrpc采用JSON进行数据编解码,因而支持跨语言调用,目前jsonrpc库是基于tcp协议实现的,暂不支持http传输方式

golang写RPC程序,必须符合4个基本条件,不然RPC用不了
结构体字段首字母要大写,可以别人调用函数名必须首字母大写函数第一参数是接收参数,第二个参数是返回给客户端的参数,必须是指针类型函数还必须有一个返回值error

服务端-代码如下(示例):

package main

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

// 声明结构体
type Data struct{}

// 声明参数结构体
type DdataRequest struct {
	A, B int
}

// 声明返回数据结构体
type DateResponse struct {
	// 相加
	Sum int
	// 乘积
	Pro int
}

/**
相加计算
(d *data):结构体
(req DdataRequest, res *DateResponse): 声明参数结构体,声明返回数据结构体
*/
func (d *Data) Plus(req DdataRequest, res *DateResponse) error {
	res.Sum = req.A + req.B
	return nil
}

func main() {
	// 注册一个rect的服务
	rpc.Register(new(Data))
	// 将协议绑定http上
	rpc.HandleHTTP()
	// 监听服务
	err := http.ListenAndServe(":8011", nil)
	if err != nil {
		log.Panicln(err)
	}
	fmt.Print("服务开启")
}


客户端端-代码如下(示例):

package main

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

type DateRequest struct {
	A, B int
}

// 返回给客户端的结果
type Response struct {
	// 相加
	Sum int
}

type Params struct {
	A, B int
}

func main() {
	// 链接rpc服务
	conn, err := rpc.DialHTTP("tcp", ":8011")
	if err != nil {
		log.Fatal(err)
	}
	req := DateRequest{2, 2}
	var res Response
	err2 := conn.Call("Data.Plus", req, &res)
	if err2 != nil {
		log.Panicln(err2)
	}
	fmt.Println("数据:", res)

}

返回结果(示例):

数据: {4}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/996172.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存