当前位置: 首页 > news >正文

1. 初识golang微服务-gRPC

单体架构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

微服务架构

在这里插入图片描述

RPC架构(远程过程调用)

在这里插入图片描述
服务端实例代码:

package main

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

type Hello struct {
}

func (h Hello) SayHello(req string, res *string) error {
	*res = "你好," + req
	fmt.Println(*res)
	time.Sleep(10*time.Second)
	return nil
}

func main() {
	// 1. 注册RPC服务
	err := rpc.RegisterName("hello", new(Hello))
	if err!=nil{
		fmt.Println(err)
	}
	
	// 2. 监听端口
	listener, err := net.Listen("tcp", "127.0.0.1:8000")
	if err!=nil{
		fmt.Println(err)
	}

	// 3. 退出程序是关闭监听
	defer listener.Close()

	for{
		// 4. 建立连接
		conn, err := listener.Accept()
		if err!=nil{
			fmt.Println(err)
		}
		// 绑定服务
		go rpc.ServeConn(conn)
	}

}

客户端示例代码:

package main

import (
	"fmt"
	"net/rpc"
)

func main() {
	// 1. 与RPC微服务建立连接
	conn, err := rpc.Dial("tcp", "127.0.0.1:8000")
	if err!=nil{
		fmt.Println(err)
	}
	
	// 2. 当程序退出时关闭连接
	defer conn.Close()

	// 3. 远程调用函数
	var res string
	err = conn.Call("hello.SayHello", "hahahha", &res)

	fmt.Println(res)
}

在这里插入图片描述

Protobuf

在这里插入图片描述

在这里插入图片描述
https://github.com/protocolbuffers/protobuf/releases/tag/v30.0
下载对应操作系统版本,然后解压缩,将bin文件夹的路径加入环境变量中
在这里插入图片描述
即为成功!
然后下载go对应的包
go get github.com/golang/protobuf/protoc-gen-go

使用样例

syntax = "proto3";
option go_package="./";

message User{
    string name = 1;
    bool male = 2;
    repeated string hobby = 3;
}

// 执行:protoc --go_out=. *.proto
package main

import (
	"fmt"
	"google.golang.org/protobuf/proto"
)

func main() {
	u := User{
		Name: "张三",
		Male: false,
	}
	data, _ := proto.Marshal(&u)
	fmt.Println(data)
	user := &User{}
	proto.Unmarshal(data, user)
	fmt.Println(user)
}

message嵌套

message SearchResponse {
  message Result {
    string url = 1;
    string title = 2;
    repeated string snippets = 3;
  }
  repeated Result results = 1;
}

定义服务类型

service SearchService {
  rpc Search (SearchRequest) returns (SearchResponse);
}

相关文章:

  • Vite+微前端Qiankun-状态管理
  • 【GL008】C++ 入门基础(2)之 多态案例
  • centos【rockylinux】安装【supervisor】的注意事项【完整版】
  • Android开发中的Native 调试
  • Go语言的基础类型
  • STM32和PN532 寻卡实验
  • Springboot项目打包成war包
  • 西门子PLC
  • Freeze-Omni:冻结 LLM,实现语音对话
  • 半导体过程控制篇6 设计质量控制SPC
  • ​第十一届传感云和边缘计算系统国际会议
  • python中测试数据管理整理
  • Spring Cloud之负载均衡之LoadBalance
  • 汇川EASY系列之以太网通讯(MODBUS_TCP做主站)
  • 【工具变量】人口老龄化对经济增长影响数据集(2005-2023年)
  • Python列表1
  • 3.19学习总结
  • 【MySQL基础-10】MySQL中的LENGTH()函数:用法详解与实例分析
  • C语言中,memmove和memcpy的区别?
  • Linux 文件操作-标准IO函数3- fread读取、fwrite写入、 fprintf向文件写入格式化数据、fscanf逐行读取格式化数据的验证
  • 首映|“凤凰传奇”曾毅:拍电影,我是认真的
  • 王星昊再胜连笑,夺得中国围棋天元赛冠军
  • 瞄准“美丽健康”赛道,上海奉贤如何打造宜居宜业之城?
  • 中国纪检监察报刊文:要让劳动最光荣成为社会的崇高风尚
  • 幸福航空取消“五一”前航班,财务人员透露“没钱飞了”
  • 高璞任中国一汽党委常委、副总经理