国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Golang 語言編寫 gRPC 實(shí)戰(zhàn)項(xiàng)目

開發(fā) 前端
本文我們介紹怎么使用 grpc 開發(fā)“分布式系統(tǒng)”。這里使用引號(hào)是因?yàn)榉植际较到y(tǒng)是一個(gè)大概念,本文我們先介紹使用 grpc 開發(fā)分布式系統(tǒng)中的 service。

 [[425759]]

1、介紹

在之前的幾篇文章中,我們介紹了 protobuf 和 grpc,本文我們介紹怎么使用 grpc 開發(fā)“分布式系統(tǒng)”。這里使用引號(hào)是因?yàn)榉植际较到y(tǒng)是一個(gè)大概念,本文我們先介紹使用 grpc 開發(fā)分布式系統(tǒng)中的 service。

grpc 是 google 開源的 rpc 框架,使用 grpc 可以方便開發(fā) rpc service;protobuf 是一種接口設(shè)計(jì)語言(IDL),grpc 框架使用的 IDL 是 protobuf。如果有讀者朋友還不了解 protobuf 和 grpc,建議先翻閱之前的幾篇文章。

本文是介紹使用 grpc 開發(fā)一個(gè)實(shí)戰(zhàn)項(xiàng)目 - ToDoList,目標(biāo)是幫助讀者朋友們熟悉項(xiàng)目開發(fā)流程,該實(shí)戰(zhàn)項(xiàng)目包含 server service 和 client service。server 主要負(fù)責(zé)數(shù)據(jù)操作,client 主要負(fù)責(zé)業(yè)務(wù)邏輯處理。

2、server

首先,我們創(chuàng)建 proto 目錄,并創(chuàng)建 proto 文件,編寫 protobuf,設(shè)計(jì)項(xiàng)目的 service,接著創(chuàng)建 pb 目錄,使用 protoc 編譯我們編寫好的 proto 文件,生成 pb 文件。然后,我們創(chuàng)建 service 目錄,編寫生成的 pb 文件中接口定義的方法。最后,我們創(chuàng)建 grpc 服務(wù)器。

server 目錄

  1. ├── dao 
  2. │   ├── mysql.go 
  3. │   └── toDoList.go 
  4. ├── main.go 
  5. ├── pb 
  6. │   ├── todoPb 
  7. │   │   ├── toDoList.pb.go 
  8. │   │   └── toDoList_grpc.pb.go 
  9. │   └── userPb 
  10. │       ├── user.pb.go 
  11. │       └── user_grpc.pb.go 
  12. ├── proto 
  13. │   ├── toDoList.proto 
  14. │   └── user.proto 
  15. └── service 
  16.     └── toDoList.go 

編寫 proto 文件

讀者朋友們?nèi)绻€不熟悉 protobuf,建議翻閱之前介紹 protobuf 的文章,限于篇幅,本文不再贅述。示例代碼如下:

  1. syntax = "proto3"
  2.  
  3. option go_package = "./todoPb"
  4.  
  5. service ToDoList { 
  6.   rpc CreateToDoList (ToDoListDetail) returns (CreateToDoListResult) {} 
  7.   rpc ReadToDoList (ToDoListPage) returns (ReadToDoListByPage) {} 
  8.  
  9. message ToDoListDetail { 
  10.   // @inject_tag: form:"id" xorm:"'id' not null pk autoincr" 
  11.   int64 id = 1
  12.  
  13. ... 

完整代碼,請查閱 github。

生成 pb 文件

接著,我們使用 protoc 編譯 proto 文件,生成 pb 文件,關(guān)于怎么使用 protoc 編譯 proto 文件,在之前的文章已經(jīng)詳細(xì)介紹,限于篇幅,本文不再贅述,編譯命令如下:

  1. protoc --go_out=./pb --go-grpc_out=./pb proto/* && protoc-go-inject-tag -XXX_skip=xorm -input=./pb/todoPb/toDoList.pb.go 

執(zhí)行以上命令,將在 pb 目錄中自動(dòng)生成 pb 文件。

編寫接口定義的方法

至此,我們開始編寫 golang 代碼,在 service 目錄中創(chuàng)建 go 文件,實(shí)現(xiàn)生成的 pb 文件中接口定義的方法。

  1. ... 
  2.  
  3. type ToDoList struct { 
  4.  pb.UnimplementedToDoListServer 
  5.  
  6. func (t *ToDoList) CreateToDoList(ctx context.Context, in *pb.ToDoListDetail) (*pb.CreateToDoListResult, error) { 
  7.  log.Printf("id: %d content:%v datetime:%d\n", in.GetId(), in.GetContent(), in.GetDatetime()) 
  8.  record, err := dao.Add(ctx, in) 
  9.  data := &pb.CreateToDoListResult{Record: record} 
  10.  return data, err 
  11.  
  12. ... 

閱讀上面這段代碼,可以發(fā)現(xiàn)我們把數(shù)據(jù)庫操作相關(guān)代碼設(shè)計(jì)在 dao 包中。service 中通過調(diào)用 dao 包的方法操作數(shù)據(jù)庫,另外,其他數(shù)據(jù)操作組件也可以在 service 中調(diào)用。

完整代碼,請查閱 github。

創(chuàng)建 gRPC 服務(wù)器

在完成 service 代碼編寫之后,我們創(chuàng)建 grpc server,然后注冊服務(wù)。

  1. ... 
  2.  
  3. server := grpc.NewServer() 
  4.  pb.RegisterToDoListServer(server, new(service.ToDoList)) 
  5.  
  6. ... 

完整代碼,請查閱 github。

以上就是使用 grpc 創(chuàng)建 rpc service 的一般流程,在生產(chǎn)環(huán)境項(xiàng)目中,還需要完善一些公共方法,比如配置文件讀取、錯(cuò)誤碼定義、參數(shù)驗(yàn)證等。為了讀者朋友們?nèi)菀桌斫猓搶?shí)戰(zhàn)項(xiàng)目中未涉及這部分內(nèi)容,感興趣的讀者朋友們可以嘗試自己實(shí)現(xiàn)該部分內(nèi)容。

3、client

client 主要負(fù)責(zé)業(yè)務(wù)邏輯,本文介紹的實(shí)戰(zhàn)項(xiàng)目使用 gin 框架實(shí)現(xiàn)路由。通常,client service 的 pb 文件拷貝 server service 生成的 pb 文件。

首先,我們創(chuàng)建 controller 目錄,調(diào)用 server service 的方法,然后,使用 gin 框架設(shè)計(jì)路由。

client 目錄

  1. ├── controller 
  2. │   └── toDoList.go 
  3. ├── main.go 
  4. ├── pb 
  5. │   ├── todoPb 
  6. │   │   ├── toDoList.pb.go 
  7. │   │   └── toDoList_grpc.pb.go 
  8. │   └── userPb 
  9. │       ├── user.pb.go 
  10. │       └── user_grpc.pb.go 
  11. └── router 
  12.     └── router.go 

拷貝 server service 生成的 pb 文件

client 直接拷貝 server service 生成的 pb 文件,不需要編寫 proto 文件,然后使用 protoc 編譯 proto 文件,生成 pb 文件。

編寫 controller 代碼,調(diào)用 server service 的方法

在 controller 目錄中創(chuàng)建 go 文件,編寫 controller 方法,并創(chuàng)建客戶端,使用創(chuàng)建的客戶端調(diào)用 server service 的方法。

  1. func CreateToDoList(ctx *gin.Context) { 
  2.  
  3. ... 
  4.  
  5. cc := NewToDoListClient() 
  6.  defer func() { 
  7.   err := cc.Close() 
  8.   if err != nil { 
  9.    log.Fatalf("conn close error=%v", err) 
  10.   } 
  11.  }() 
  12.  cli := pb.NewToDoListClient(cc) 
  13.  ctx1, cancel := context.WithTimeout(context.Background(), time.Second) 
  14.  defer cancel() 
  15.  res, err := cli.CreateToDoList(ctx1, param) 
  16.    
  17. ... 

完整代碼,請查閱 github。

創(chuàng)建 gin 路由

編寫完 controller 之后,創(chuàng)建 router 目錄,在 router 目錄中創(chuàng)建 gin 路由,用于訪問 controller 中的方法。

  1. ... 
  2.  
  3. r := gin.Default() 
  4.  apiV1 := r.Group("/v1"
  5.  todolist := apiV1.Group("/todolist"
  6.  { 
  7.   todolist.POST("/add", controller.CreateToDoList) 
  8.  
  9. ... 

完整代碼,請查閱 github。

4、總結(jié)

本文我們介紹了怎么使用 grpc 開發(fā) service。讀者朋友們閱讀完本文,可以了解使用 grpc 開發(fā) service 的一般開發(fā)流程,建議感興趣的讀者朋友們,實(shí)現(xiàn)項(xiàng)目中 user service 的代碼編寫。

 

責(zé)任編輯:張燕妮 來源: Golang語言開發(fā)棧
相關(guān)推薦

2021-09-13 05:02:49

GogRPC語言

2021-09-01 23:29:37

Golang語言gRPC

2021-10-10 23:02:49

Golang語言代碼

2022-02-20 23:15:46

gRPCGolang語言

2025-01-13 06:00:00

Go語言gRPC

2022-04-29 11:52:02

API代碼HTTP

2023-03-01 08:33:37

gRPC健康檢查代碼

2024-09-04 08:09:51

2021-06-09 23:36:46

Golang語言版本

2025-09-03 00:06:05

2021-05-28 08:58:41

Golang網(wǎng)卡metrics

2021-10-26 09:26:21

編程技能開發(fā)

2021-12-05 23:14:24

微服務(wù)GolanggRPC

2018-08-01 15:10:02

GolangPython語言

2021-06-29 23:40:19

Golang語言并發(fā)

2021-12-13 01:24:14

語言Golang panic

2023-09-06 07:17:57

2020-11-01 17:13:22

DotNET 5語言gRPC

2010-01-13 13:13:26

C++項(xiàng)目

2021-11-08 23:09:07

Go排序數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产91精品不卡视频| 一区不卡视频| 国产在线|日韩| 欧美天堂一区二区三区| 大香一本蕉伊线亚洲网| 成人av在线网| 777久久精品一区二区三区无码| 欧美日韩一区二区三区四区在线观看| 欧美性在线视频| 超碰成人在线免费| 欧美激情亚洲一区| 亚洲视频三区| 久久久久成人网| 白嫩白嫩国产精品| 久久久久久中文| 国产96在线亚洲| 91成人国产在线观看| 久久久久久久久久久久久久久久久久久久| 久久成年人视频| 日韩视频一二区| 国产+人+亚洲| 九九视频精品全部免费播放| 欧美日韩国产成人在线观看| 亚洲日本va中文字幕| 久久久免费av| 最新精品国偷自产在线| 国产精品海角社区在线观看| 精品av一区二区| 国产精品久久久久久超碰| 自拍偷拍一区| 91青草视频久久| 在线看片一区| 午夜国产精品视频| 91久久国产综合久久91精品网站| 日韩av专区| 国产98在线|日韩| 国内久久视频| 日本视频精品一区| 国产一区二区三区黄视频 | 久久综合久久综合亚洲| 青青艹视频在线| 国产精品色呦呦| 粉嫩粉嫩芽的虎白女18在线视频| 欧美视频裸体精品| 日韩精品成人av| 亚洲精品国产精品自产a区红杏吧 亚洲精品国产精品乱码不99按摩 亚洲精品国产精品久久清纯直播 亚洲精品国产精品国自产在线 | 亚洲人成午夜免电影费观看| 亚洲九九九在线观看| 不卡一区视频| 国产精品视频最多的网站| 禁久久精品乱码| 91免费国产精品| 亚洲乱码精品一二三四区日韩在线| 日韩欧美在线番号| 亚洲精品99久久久久中文字幕| 一区在线影院| 国产97在线|日韩| 日一区二区三区| 亚洲精品乱码久久久久久自慰 | 婷婷综合伊人| 中文字幕日韩一区二区三区不卡| 国产午夜三级一区二区三| 欧美写真视频一区| 亚洲国产精品成人av| 另类一区二区三区| 成人激情在线观看| 国产精品一二三区在线| 国产专区中文字幕| 日韩一区二区在线观看视频播放| 精品成人av| 99国产在线| 99视频精品免费视频| 日韩有码电影| 久久韩剧网电视剧| 91成人影院| 2022亚洲天堂| 欧美精品一级二级三级| 96视频在线观看欧美| 91亚色免费| 久久久久国产精品麻豆ai换脸 | 亚洲视频在线观看一区| 在线中文字幕-区二区三区四区| 欧美韩国理论所午夜片917电影| 1024精品一区二区三区| 999精品视频在线| 精品国产乱码久久久久久蜜臀| 欧美18免费视频| 7777精品伊人久久久大香线蕉| 成人一区视频| 成人资源av| 日本一区二区动态图| 在线观看的av| 97热在线精品视频在线观看| 日韩福利电影在线| 中文字幕视频在线观看| www.日韩av.com| 国产日韩一区| 国内在线高清免费视频| 一区二区三区无码高清视频| 亚洲午夜黄色| 老司机在线免费视频| 中文字幕在线观看日韩| 一本色道久久精品| 美国成人av| 久久久久久久久网站| 国产99久久久国产精品潘金网站| 欧美91精品久久久久国产性生爱| 高清欧美一区二区三区| 国产成a人无v码亚洲福利| 69xxxx欧美| 国产精品美女网站| 国产精品久久久久久久久免费相片 | 不卡一区在线观看| 91蜜桃在线视频| 亚洲一区亚洲二区亚洲三区| 亚洲国产高清不卡| 亚洲不卡系列| 亚洲一区二区在线免费观看| 欧美在线观看18| 第四色成人网| 国产黄色片大全| 欧美激情第1页| 久久九九久久九九| 日韩亚洲国产免费| 国产a级黄色大片| 亚洲毛片在线免费观看| 蜜桃视频一区二区三区| 久久久久久国产精品免费无遮挡| 91精品国产高清久久久久久91裸体 | 日韩福利影视| 日本阿v视频在线观看| 亚洲男人的天堂在线播放| 日韩二区在线观看| 欧美1234区| 综合久久国产| 亚洲热线99精品视频| 国产高清精品网站| 亚洲精品555| 国产成人亚洲精品无码h在线| 日韩亚洲欧美成人| 久久噜噜亚洲综合| 精品国产乱子伦一区二区| 午夜宅男在线视频| 日本精品久久久久影院| 亚洲欧美激情在线| 国产一区二区在线| 中文字幕欧美一区二区| 亚洲综合视频1区| 欧美群妇大交群中文字幕| 久久久国产精品一区二区中文| h网站久久久| 337p亚洲精品色噜噜狠狠p| 在线亚洲国产精品网| 久久婷婷国产综合国色天香| 成人在线视频你懂的| 少妇**av毛片在线看| 亚洲已满18点击进入在线看片 | 秋霞午夜鲁丝一区二区老狼| 电影在线观看一区| 日本免费a视频| 欧美精品九九久久| 五月天婷婷综合| 亚洲综合另类| 日韩成人亚洲| 一插菊花综合| 亚洲一区二区中文| 亚洲大胆人体视频| 99久久久久久99| 欧美日一区二区| 日本在线天堂| 黄色一级片国产| 欧美亚洲另类视频| 欧美少妇性性性| 国产成人免费在线观看不卡| 欧美jizz19性欧美| 久久免费看视频| 中文字幕中文字幕99| 欧美黑人xxxx| 91激情五月电影| 国产凹凸在线观看一区二区| 免费精品一区二区三区在线观看| 96久久久久久| 视频在线99re| 日本韩国欧美精品大片卡二| 91精品午夜视频| 欧美国产欧美综合| 一区二区国产在线观看| 成人在线视频www| 最新电影电视剧在线观看免费观看| 日韩网站在线免费观看| 国产一区二区视频在线观看| 亚洲黄在线观看| 午夜影院久久久| 精品一区在线看| 日韩成人免费| 成人在线视频免费| 午夜毛片在线| 黄色三及免费看| xxxx18hd亚洲hd捆绑| 国产伦精品一区二区三区四区免费|