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

目录

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

一、认识微服务?

1、什么是微服务?

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

2、微服务的特点

  1. 单一职责
  2. 轻量级通信
  3. 独立性
  4. 迭代开发

3.微服务的不足

  1. 运维成本高
  2. 接口成本高
  3. 业务分类困难
  4. 保证数据一致性

二、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}

你可能感兴趣的:(golang学习,rpc,golang,微服务)