C++GO語言微服務和服務發現

目錄

01 03-go-micro簡介

02 04-服務發現的簡單認識

03 05-consul的安裝

04 06-consul常用的命令

05 07-注冊服務到consul并驗證

06 08-consul健康檢查

07 09-consul結合grpc使用-上(只實現grpc遠程調用)

08 10-consul結合grpc使用-中(注冊服務到consul)

09 11-consul結合grpc使用-下(client從consul獲取服務

10 12-consul結合grpc使用-小結

11 13-服務注銷


01go-micro簡介

# go-Micro 框架## 創建 micro 服務命令:micro new --type srv test66框架默認自帶服務發現:mdns。使用consul服務發現:1. 初始consul服務發現: consulReg := consul.NewRegistry()2. 在 NewService 中 添加 服務。 micro.Registry(consulReg ),## 使用 go-micro框架 創建 客戶端命令:micro new --type web test77### 補充 http 相關知識:- 路由器:資源分發
- 路由:請求分發。- service.HandleFunc("/test77/call", handler.Test77Call)- 將 /test77/call 這個請求,通過 回到函數 Test77Call() 處理。
- URL:- 組成:https://ip+port/資源路徑- https://ip+port/   找到 pc機,找到 對應進程- 資源路徑:在代碼中,稱之為路由。- “/ ” : 代表 主機上進程 對應的默認資源。- http協議,自動找當前目錄下的 index.html 文件,做默認頁面。

02 服務發現的簡單認識

### go-micro 框架 測試使用 分析圖![1581907970023](課堂筆記-03.assets/1581907970023.png)# gin 框架go常見的web框架:gin、beego、echo、Iris 。。。### 實現簡單的 web http 常用方法與 數據庫訪問 一一對應。- GET —— 查 —— 獲取數據
- Post —— 增 —— 增加數據
- Put —— 改 —— 更新數據
- Delete —— 刪 —— 刪除數據?	

03 consul的安裝

### 使用 gin 框架創建最簡單的web ```gofunc main()  {// 1. 初始化路由 -- 官網:初始化 web 引擎router := gin.Default()// 2. 做路由匹配router.GET("/", func(context *gin.Context) {context.Writer.WriteString("hello world!")})// 3. 啟動運行router.Run(":8080")
}
```### gin 框架的客戶端 與 微服務 對接1.  封裝回調函數, 給 router.Get() 設置2.  拷貝 微服務的 “ 密碼本” protobuf 到  web 中3.  修改 protobuf文件的 包名。  test66別名  “test66web/proto/test66”4.  實現 回調函數:1. 初始化客戶端。    microClient := NewTeset66Sevice(服務名,client.DefaultClient)2. 調用遠程服務。    resp, err := microClient.Call(context.TODO, &test66.Request{?						       })3. 將 返回的 數據, 顯示到 瀏覽器。 context.Writer.WriteString(resp.Msg);```go
package mainimport ("github.com/gin-gonic/gin""fmt"test66 "test66web/proto/test66"     // test66 為包的別名."github.com/micro/go-micro/client""context"
)func CallRemote(ctx *gin.Context)  {// 1. 初始化客戶端microClient := test66.NewTest66Service("go.micro.srv.test66", client.DefaultClient)fmt.Println()// 2. 調用遠程服務resp, err := microClient.Call(context.TODO(), &test66.Request{Name:"xiaowang",})if err != nil {fmt.Println("call err:", err)return}// 為了方便查看, 在打印之前將結果返回給瀏覽器ctx.Writer.WriteString(resp.Msg)fmt.Println(resp, err)
}

04 consul常用的命令

func main()  {// 1. 初始化路由 -- 官網:初始化 web 引擎router := gin.Default()// 2. 做路由匹配router.GET("/", CallRemote)// 3. 啟動運行router.Run(":8080")
}```![1581911529452](課堂筆記-03.assets/1581911529452.png)### 指定 consul 服務發現到 go-micro 服務和 gin 框架客戶端中- mdns服務發現: (組播)支持的服務,必須是本地服務, 局域網內的服務。#### 修改 go-micro 微服務1. consulReg := consul.NewRegistry()   初始化 consul服務發現
2. 添加 服務 service := micro.NewService(micro.Name("go.micro.srv.test66"),micro.Registry(consulReg),micro.Version("latest"),)3. 在命令行,執行 consul agent -dev

05 注冊服務到consul并驗證

#### 修改 gin 框架 web服務 (客戶端)1.  consulReg := consul.NewRegistry()   初始化 consul服務發現
2.  microClinet := micro.NewService( micro.Registry(consulReg ) )
3.  test66.NewTest66Service(“服務名”,microClinet.Client() )測試:瀏覽器鍵入: 192.168.6.108:8080  ——> hello xiaowang ![1581922279521](課堂筆記-03.assets/1581922279521.png)# REST REST全稱是Representational State Transfer:  表述性 狀態 轉義本質:一種代碼設計風格。  web開發中常用。——遵循風格!使用:一般以 http 4 種請求方法, 來確定對某一資源(URI:標識符。名詞)的 固定操作。- 獲取數據:GET
- 添加數據:POST
- 修改數據:PUT
- 刪除數據:Delete?		滿足 REST 設計風格的, 稱之為 “RESTful”

06 consul健康檢查

# MVC- 是一種常見的 “代碼組織架構”, 可以在開發中,對數據進行處理并解耦。- model:模型。 處理數據庫相關的文件。- veiw:視圖。處理顯示相關的文件。 網站:html- controller:控制器。處理具體業務!  聯動 m 和 v
- MVC 與語言無關!是常見的 代碼組織架構。![1581924280038](課堂筆記-03.assets/1581924280038.png)# 項目準備1. 準備項目環境。1. 創建項目目錄  web、service2. 在 web 端 使用 MVC3. 創建項目常用目錄: conf 配置文件、utils 工具類、bin可執行文件、test測試目錄4. 導入 異常處理error.go5. 導入前端資源 html/ 到 view/ 中2. 開發項目1. 開發 微服務端2. 開發 web 服務(客戶端)### http協議錯誤5 類:1. 1xx	   100		請求成功,需要繼續發送請求
2. 2xx       200   201  202    請求被成功接收。
3. 3xx       300 301               請求的資源,指定到對應的 URI上
4. 4xx       404  403              請求端錯誤
5. 5xx       500 501  502      服務端錯誤### 網站開發形式:1. 前后端不分離- 前端只負責頁面創建,不負責加載數據。- 后臺負責主要業務書寫,數據操作、加載。—— 需要后端會 web。 css 、js、h5 
2. 前后端分離- 前端負責頁面創建 和 數據的加載。- 后端只負責數據處理。  —— 節省時間:服務器優化     1)健壯性 2)并發性。

07 consul結合grpc使用-上(只實現grpc遠程調用)

# 獲取 session 1.  在 web/main.go 中 , 跟據 gin 框架 使用static() , 設置訪問路徑
2. F12 瀏覽器中,查看 NetWork 中 Headers 和  Respose。 得到 url
3. 查看 《接口文檔.doc》, 獲取 url 、錯誤碼、錯誤處理函數。
4. 在 web/ 下 遵循 MVC 設計模式創建  controller 目錄。添加 user.go
5. 根據 《接口文檔.doc》實現錯誤函數。1. resp[“errno”]2. resp[“errmsg”]3. ctx.Json(200, resp)  // 將 錯誤消息,進行序列化。返回給瀏覽器。
6.  url尋址時,都是從 “/‘’ 開始, 產生歧義- router.Static(“/”)    --- 修改為: router.Static(“/home”)7. 瀏覽器測試: IP:8080/home 

08 consul結合grpc使用-中(注冊服務到consul)

09 consul結合grpc使用-下(client從consul獲取服務

10 consul結合grpc使用-小結

11 服務注銷

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80478.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80478.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80478.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HDFS 常用基礎命令詳解——快速上手分布式文件系統

簡介: 本文面向剛接觸 Hadoop HDFS(Hadoop 分布式文件系統)的讀者,結合 CSDN 博客風格,系統梳理最常用的 HDFS 客戶端命令,并配以示例和注意事項,幫助你在開發和運維中快速掌握 HDFS 的文件管理…

VUE CLI - 使用VUE腳手架創建前端項目工程

前言 前端從這里開始,本文將介紹如何使用VUE腳手架創建前端工程項目 1.預準備(編輯器和管理器) 編輯器:推薦使用Vscode,WebStorm,或者Hbuilder(適合剛開始練手使用),個…

make和makefile的使用,以及寫一個簡單的進度條程序

1.自動化構建-make/makefile 1.1 背景 一個工程文件中的文件不計其數,其按類型、功能、模塊放在若干目錄中,makefile定義了一系列規則來指定哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于過呢…

數據結構中的棧與隊列:原理、實現與應用

前言:棧和隊列是計算機科學中兩種最基礎的線性數據結構,它們的獨特操作規則和廣泛的應用場景使其成為每一位開發者必須掌握的核心知識。本文將通過生活案例、代碼實現和實際應用場景,帶您深入理解這兩種數據結構的精髓。 1.棧(Sta…

如何選擇自己喜歡的cms

選擇內容管理系統cms what is cms1.whatcms.org2.IsItWP.com4.Wappalyzer5.https://builtwith.com/6.https://w3techs.com/7. https://www.netcraft.com/8.onewebtool.com如何在不使用 CMS 檢測器的情況下手動檢測 CMS 結論 在開始構建自己的數字足跡之前,大多數人會…

SDC命令詳解:使用all_outputs命令進行查詢

相關閱讀 SDC命令詳解https://blog.csdn.net/weixin_45791458/category_12931432.html all_outputs命令用于創建一個輸出端口對象集合,關于設計對象和集合的更詳細介紹,可以參考下面的博客。 Synopsys:設計對象https://chenzhang.blog.csdn…

vue 中的ref

vue 中的ref vue 中的ref 1. ??ref?? ** 的基本作用** 在 Vue 中&#xff0c;ref 是用來獲取 DOM 元素或者組件實例的一種方式。對于 <el-form> 組件&#xff0c;通過 ref 可以獲取到該表單組件的實例&#xff0c;進而調用表單組件提供的各種方法和訪問其屬性。 …

數據庫版本控制工具--flyway

一. 什么是Flyway Flyway 是一款開源的數據庫遷移工具。它采用簡單直觀的方式管理數據庫變更&#xff0c;通過版本化的遷移腳本確保數據庫結構的一致性和可重復性。無論是開發環境、測試環境還是生產環境&#xff0c;Flyway 都能確保數據庫變更按照預期順序執行&#xff0c;避…

C++使用PoDoFo庫處理PDF文件

&#x1f4da; PoDoFo 簡介 PoDoFo 是一個用 C 編寫的自由開源庫&#xff0c;專用于 讀取、寫入和操作 PDF 文件。它適用于需要程序化處理 PDF 文件的應用程序&#xff0c;比如批量生成、修改、合并、提取元數據、繪圖等。 &#x1f31f; 核心特點 特性說明&#x1f4c4; P…

論文分享? arXiv2025 | TTRL: Test-Time Reinforcement Learning

TTRL: Test-Time Reinforcement Learning TTRL&#xff1a;測試時強化學習 https://github.com/PRIME-RL/TTRL &#x1f4d6;導讀&#xff1a;本篇博客有&#x1f9a5;精讀版、&#x1f407;速讀版及&#x1f914;思考三部分&#xff1b;精讀版是全文的翻譯&#xff0c;篇幅較…

dify插件接入fastmcp示例

文章目錄 1. 使用python完成mcp服務1.1 準備環境&#xff08;python安裝fastmcp&#xff09;1.2 mcp服務端示例代碼1.3 啟動mcp服務端 2. dify接入2.1 安裝MCP SSE和 Agent 策略&#xff08;支持 MCP 工具&#xff09; 插件2.2 dify agent插件配置mcp:2.3 mcp服務配置&#xff…

Linux 挖礦木馬排查命令清單

Linux 挖礦木馬排查命令清單 1. 系統資源使用情況檢查 # 查看CPU、內存使用情況 top -c# 檢查CPU占用最高的進程 ps aux --sort-%cpu# 查找可疑進程名 ps -ef | grep -i miner\|cpu\|GPU\|xmr# 檢查網絡連接情況 lsof -i2. 可疑進程和隱藏進程檢查 # 檢查僵尸進程 ps -ef | …

PyTorch 中如何針對 GPU 和 TPU 使用不同的處理方式

一個簡單的矩陣乘法例子來演示在 PyTorch 中如何針對 GPU 和 TPU 使用不同的處理方式。 這個例子會展示核心的區別在于如何獲取和指定計算設備&#xff0c;以及&#xff08;對于 TPU&#xff09;可能需要額外的庫和同步操作。 示例代碼&#xff1a; import torch import tim…

自主shell命令行解釋器

目標 能處理普通命令能處理內建命令 實現原理 用下面的時間軸來表示時間發生次序。時間從左向右。shell由標識為sh的方塊&#xff0c;它隨著時間從左向右移動。 shell從用戶讀入字符串“ls”。shell建立一個新的進程&#xff0c;然后等待進程中運行ls程序并等待進程結束。 …

如何在sheel中運行Spark

啟動hdfs集群&#xff0c;打開hadoop100:9870&#xff0c;在wcinput目錄下上傳一個包含很多個單詞的文本文件。 啟動之后在spark-shell中寫代碼。 // 讀取文件&#xff0c;得到RDD val rdd1 sc.textFile("hdfs://hadoop100:8020/wcinput/words.txt") // 將單詞進行切…

【入門】數字走向II

描述 輸入整數N&#xff0c;輸出相應方陣。 輸入描述 一個整數N。&#xff08; 0 < n < 10 ) 輸出描述 一個方陣&#xff0c;每個數字的場寬為3。 #include <bits/stdc.h> using namespace std; int main() {int n;cin>>n;for(int in;i>1;i--){for(…

Python自動化-python基礎(下)

六、帶參數的裝飾器 七、函數生成器 運行結果&#xff1a; 八、通過反射操作對象方法 1.添加和覆蓋對象方法 2.刪除對象方法 通過使用內建函數: delattr() # 刪除 x.a() print("通過反射刪除之后") delattr(x, "a") x.a()3 通過反射判斷對象是否有指定…

重新定義高性能:Hyperlane —— Rust生態中的極速HTTP服務器

重新定義高性能&#xff1a;Hyperlane —— Rust生態中的極速HTTP服務器 &#x1f680; 為什么選擇Hyperlane&#xff1f; 在追求極致性能的Web服務開發領域&#xff0c;Hyperlane 憑借其獨特的Rust基因和架構設計&#xff0c;在最新基準測試中展現出令人驚艷的表現&#xff…

通俗的理解MFC消息機制

1. 消息是什么&#xff1f; 想象你家的門鈴響了&#xff08;比如有人按門鈴、敲門、或者有快遞&#xff09;&#xff0c;這些都是“消息”。 在 MFC 中&#xff0c;消息就是系統或用戶觸發的各種事件&#xff0c;比如鼠標點擊&#xff08;WM_LBUTTONDOWN&#xff09;、鍵盤輸入…

騰訊開源SuperSonic:AI+BI如何重塑制造業數據分析?

目錄 一、四款主流ChatBI產品 二、ChatBI應用案例與實際落地情況 三、SuperSonic底層原理 3.1、Headless?BI 是什么 3.2、S2SQL?是什么 3.3、SuperSonic 平臺架構 四、ChatBI應用細節深挖 五、與現有系統的集成方案 六、部署和安全 七、開源生態、可擴展性與二次開…