微服務架構攀登之路(四)之使用gRPC構建微服務

2022-04-10 16:52:40 字數 2014 閱讀 7416

做乙個處理使用者資訊的微服務

客戶端通過使用者名稱,可以從服務端查詢使用者的基本資訊

grpc

proto

user.proto 定義客戶端請求、服務端響應的資料格式

user.pb.go 自動生成的,為資料互動提供的函式

server.go 微服務服務端

client.go 微服務客戶端

1. 編寫proto檔案

// 版本號

syntax = "proto3";

// 指定生成 user.pb.go的包名

package proto;

// 定義客戶端請求的資料格式

message userrequest

// 定義服務端相應的額資料格式

message userresponse

// 相當於介面

// service 定義開放呼叫的額服務

service userinfoservice

}

2. 生成.go檔案

3.編寫服務端

package main

import (

"context"

"fmt"

pb "go-micro/my-micro/grpc/proto"

"google.golang.org/grpc"

"net"

)// 定義服務端實現約定的介面

type userinfoservice struct

var u = userinfoservice{}

// 實現服務端需要首先的介面

func (s *userinfoservice) getuserinfo(ctx context.context, req *pb.userrequest) (resp *pb.userresponse, err error) ,

} }err = nil

return

}func main()

fmt.printf("開始監聽:%s\n", addr)

// 2.例項化grpc

s := grpc.newserver()

// 3.在grpc上註冊微服務

// 第二個引數型別需要介面型別的變數

pb.registeruserinfoserviceserver(s,&u)

// 4.啟動grpc服務

s.serve(lis)

}

4. 編寫客戶端

package main

import (

"context"

"fmt"

pb "go-micro/my-micro/grpc/proto"

"google.golang.org/grpc"

)func main()

defer conn.close()

// 2. 例項化grpc客戶端

client := pb.newuserinfoserviceclient(conn)

// 3. 組裝引數

req := new(pb.userrequest)

req.name = "zhangsan"

// 4. 呼叫介面

resp, err := client.getuserinfo(context.background(), req)

if err != nil

fmt.printf("響應結果: %v\n", resp)

架構之路 理解微服務

如何理解微服務,解決什麼問題,有什麼好處。理解 單一職責原則,把相同原因而變化的東西聚合到一起,把不同原因而變化的東西分離開來 就比如,社會崗位分工一樣,每個人因崗位的不同,處理的內容不同,所以可以把每個崗位看做是單一職責原則。服務之間均通過網路呼叫進行通訊,從而加強服務之間的隔離性,避免緊耦合。通...

微服務架構成功之路

近年來,在軟體開發領域關於微服務的討論呈現出火爆的局面,有人傾向於在系統設計與開發中採用微服務方式實現軟體系統的松耦合 跨部門開發 同時,反對之聲也很強烈,持反對觀點的人表示微服務增加了系統維護 部署的難度,導致一些功能模組或 無法復用,同時微服務允許使用不同的語言和框架來開發各個系統模組,這又會增...

微服務架構成功之路

近年來,在軟體開發領域關於微服務的討論呈現出火爆的局面,有人傾向於在系統設計與開發中採用微服務方式實現軟體系統的松耦合 跨部門開發 同時,反對之聲也很強烈,持反對觀點的人表示微服務增加了系統維護 部署的難度,導致一些功能模組或 無法復用,同時微服務允許使用不同的語言和框架來開發各個系統模組,這又會增...