golang入门学习--微服务2.0:认识微服务 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}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值