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

01 創建go-micro項目-查看生成的 proto文件

02 創建go-micro項目-查看生成的main文件和handler

## 創建 micro 服務

命令:micro new --type srv test66

框架默認自帶服務發現:mdns。

使用consul服務發現:

????1.?初始consul服務發現: consulReg := consul.NewRegistry()
?????2.?在 NewService 中 添加 服務。 micro.Registry(consulReg ),

03 http補充說明知識

# 使用 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 文件,做默認頁面。

### go-micro 框架 測試使用 分析圖

04 go-micro框架服務端-客戶端測試

# gin 框架

go常見的web框架:gin、beego、echo、Iris 。。。

### 實現簡單的 web?

http 常用方法與 數據庫訪問 一一對應。

- GET —— 查 —— 獲取數據
- Post —— 增 —— 增加數據
- Put —— 改 —— 更新數據
- Delete —— 刪 —— 刪除數據

05 gin框架介紹和測試

06 gin框架客戶端與micro服務端對接

### 使用 gin 框架創建最簡單的web?

```go

func main()??{
????// 1. 初始化路由 -- 官網:初始化 web 引擎
????router := gin.Default()

????// 2. 做路由匹配
????router.GET("/", func(context *gin.Context) {
????????context.Writer.WriteString("hello world!")
????})

????// 3. 啟動運行
????router.Run(":8080")
}
```

07 使用訪問發現consul測試

### 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 main

import (
????"github.com/gin-gonic/gin"
????"fmt"
????test66 "test66web/proto/test66"?????// test66 為包的別名.
????"github.com/micro/go-micro/client"
????"context"
)

08 consul使用圖解和RESTful

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)
}

func main()??{
????// 1. 初始化路由 -- 官網:初始化 web 引擎
????router := gin.Default()

????// 2. 做路由匹配
????router.GET("/", CallRemote)

????// 3. 啟動運行
????router.Run(":8080")
}

09 MVC簡介

### 指定 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

10 創建項目-創建目錄結構-查看文檔-導入錯誤處理包

#### 修改 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)

11 創建項目-資源目錄html介紹

# REST?

REST全稱是Representational State Transfer:??表述性 狀態 轉義

本質:一種代碼設計風格。??web開發中常用。——遵循風格!

使用:一般以 http 4 種請求方法, 來確定對某一資源(URI:標識符。名詞)的 固定操作。

-?獲取數據:GET
-?添加數據:POST
-?修改數據:PUT
-?刪除數據:Delete

?????????滿足 REST 設計風格的, 稱之為 “RESTful”

?????

# MVC

-?是一種常見的 “代碼組織架構”, 可以在開發中,對數據進行處理并解耦。
????-?model:模型。 處理數據庫相關的文件。
????-?veiw:視圖。處理顯示相關的文件。 網站:html
????-?controller:控制器。處理具體業務!??聯動 m 和 v
-?MVC 與語言無關!是常見的 代碼組織架構。

![1581924280038](課堂筆記-03.assets/1581924280038.png)

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

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

相關文章

Redis--常見數據類型List列表

目錄 一、概念 二、命令 2.1 LPUSH 2.2 LPUSHX 2.3 RPUSH 2.4 RPUSHX 2.5 LRANGE 2.6 LPOP 2.7 RPOP 2.8 LINDEX 2.9 LINSERT 2.10 LLEN 2.11 阻塞版本命令 三、內部編碼 一、概念 列表類型是用來存儲多個有序的字符串,列表中的每個字符串稱為元素&…

QListWedget控件使用指南

QListWedget公共函數 函數簽名功能描述QListWidget(QWidget *parent nullptr)構造函數,創建一個QListWidget對象,可指定父部件(默認為nullptr)。virtual ~QListWidget()虛析構函數,釋放QListWidget對象及其資源。voi…

Seata源碼—1.Seata分布式事務的模式簡介

大綱 1.Seata分布式事務框架簡介 2.Seata AT模式實現分布式事務的機制 3.Seata AT模式下的寫隔離機制 4.Seata AT模式下的讀隔離機制 5.官網示例說明Seata AT模式的工作機制 6.Seata TCC模式的介紹以及與AT模式區別 7.Seata Saga模式的介紹 8.單服務多個庫的分布式事務…

【Qt】之音視頻編程2:QtAV的使用篇

QtAV 基本播放控制功能實現&#xff08;C & QML&#xff09; QtAV 提供了完整的播放控制 API&#xff0c;支持 播放、暫停、停止、快進快退、截屏 等功能。以下是具體實現方法&#xff1a; 1. C 控制方式 基本播放控制 #include <QtAV> #include <QtAV/AVPlaye…

歌詞滾動效果

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><!-- 設置標簽頁圖標 --><link rel"shortcut icon&…

基于大模型的TIA診療全流程智能決策系統技術方案

目錄 一、多模態數據融合與預處理系統1.1 數據接入模塊1.2 數據預處理偽代碼二、TIA智能預測模型系統2.1 模型訓練流程2.2 混合模型架構偽代碼三、術中智能監測系統3.1 實時監測流程3.2 實時預測偽代碼四、智能診療決策系統4.1 手術方案推薦流程4.2 麻醉方案生成偽代碼五、預后…

Java 日期解析與格式化:從標準格式到自然語言解析

使用 Java 搭配 Apache Commons Lang3 和 Natty 庫&#xff0c;實現靈活高效的日期解析與格式化。 一、背景 將不同格式的日期統一成一個格式。日期格式可能有以下幾種類型&#xff1a; 標準格式&#xff1a;2024-02-28、14/05/2022、2002年5月6日非英文月份縮寫&#xff1a;…

Room持久化庫:從零到一的全面解析與實戰

簡介 在Android開發中,Room作為官方推薦的數據庫持久化庫,提供了對SQLite的抽象層,使得數據庫操作更加安全、高效且易于維護。 Room通過注解處理器和編譯時驗證,顯著降低了數據庫操作的復雜度,同時支持響應式編程模式,使開發者能夠輕松實現數據變化的實時監聽。對于企業…

MySQL(6)如何刪除數據庫和表?

在 MySQL 中刪除數據庫和表是常見的管理操作。下面將詳細介紹如何使用 SQL 語句以及圖形化工具來刪除數據庫和表。 步驟一&#xff1a;連接 MySQL 服務器 首先&#xff0c;連接到 MySQL 服務器&#xff0c;可以使用命令行工具 mysql 或圖形化工具如 MySQL Workbench。 使用命…

攜固態電池、新形態鋼殼疊片電池等產品 豪鵬科技將亮相CIBF 2025

攜固態電池、新形態鋼殼疊片電池等產品 豪鵬科技將亮相CIBF 2025 來源&#xff1a; 電池百人會-電池網 豪鵬科技&#xff08;展位號:14W001&#xff09;將攜固態電池、新形態鋼殼疊片電池及高安全性鈉離子電池等前沿技術產品亮相CIBF 2025&#xff0c;憑借多年的技術積累和產…

React學習———useEffect和useLayoutEffect

useEffect useEffect是React的一個Hook&#xff0c;用于在函數組件中處理副作用。副作用包括數據獲取、訂閱、手動DOM操作以及其他需要再渲染后執行的操作 基本用法 useEffect(() > {// 副作用邏輯return () > {// 可選的清理函數} }, [依賴數組])第一個參數&#xff…

“天神之眼”計算平臺的算力設計(預計500-1000 TOPS)

關于比亞迪“天神之眼”計算平臺的算力設計&#xff08;預計500-1000 TOPS&#xff09;&#xff0c;其技術路徑和行業意義值得深入探討。以下從實現方式、技術挑戰和行業影響三個維度展開分析&#xff1a; 1. 多芯片互聯的技術實現路徑 &#xff08;1&#xff09;芯片選型方案…

FPGA: Xilinx Kintex 7實現PCIe接口

在Xilinx Kintex-7系列FPGA上實現PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;接口&#xff0c;通常使用Xilinx提供的7 Series Integrated Block for PCIe IP核&#xff0c;結合Vivado設計流程。以下是實現PCIe接口的詳細步驟和關鍵點&#xff0c;適…

ArcGIS Desktop使用入門(二)常用工具條——圖形

系列文章目錄 ArcGIS Desktop使用入門&#xff08;一&#xff09;軟件初認識 ArcGIS Desktop使用入門&#xff08;二&#xff09;常用工具條——標準工具 ArcGIS Desktop使用入門&#xff08;二&#xff09;常用工具條——編輯器 ArcGIS Desktop使用入門&#xff08;二&#x…

JT/T 808 通訊協議及數據格式解析

文章目錄 一、引言二、協議數據幀結構三、消息頭結構&#xff08;Message Header&#xff09;四、常用消息類型&#xff08;Message ID&#xff09;五、典型消息體結構解析六、數據轉義規則七、校驗碼計算方法八、終端與平臺通信流程示意&#xff08;簡要&#xff09;九、平臺接…

Rust 輸出到命令行

Rust 輸出到命令行 引言 Rust 是一門系統編程語言&#xff0c;以其高性能、內存安全、并發支持和零成本抽象等特性而聞名。在開發過程中&#xff0c;將 Rust 程序的輸出傳遞到命令行是常見的需求。本文將詳細介紹 Rust 輸出到命令行的多種方法&#xff0c;幫助讀者掌握這一技…

從字符串轉換到矩陣快速冪:解決多次轉換后的長度問題

引言 在編程競賽和算法問題中&#xff0c;我們經常會遇到需要對字符串進行多次轉換的問題。本文將介紹一個有趣的問題&#xff1a;給定一個字符串和轉換規則&#xff0c;計算經過多次轉換后字符串的長度。由于直接模擬會導致性能問題&#xff0c;我們將使用矩陣快速冪來高效解…

Vue2 elementUI 二次封裝命令式表單彈框組件

需求&#xff1a;封裝一個表單彈框組件&#xff0c;彈框和表單是兩個組件&#xff0c;表單組件以插槽的形式動態傳入彈框組件中。 外部組件使用的方式如下&#xff1a; 直接上代碼&#xff1a; MyDialog.vue 彈框組件 <template><el-dialog:titletitle:visible.syn…

React Hooks:從“這什么鬼“到“真香“的奇幻之旅

寫在前面:一個讓React老手都拍案叫絕的魔法 “等等,函數組件怎么能有狀態?!” —— 這是2018年我第一次聽說React Hooks時的反應。當時我正在用class組件寫一個復雜的表單,生命周期方法亂得像一碗意大利面。直到我看到了這段代碼: function Counter() {const [count, s…

論文閱讀筆記——雙流網絡

雙流網絡論文 視頻相比圖像包含更多信息&#xff1a;運動信息、時序信息、背景信息等等。 原先處理視頻的方法&#xff1a; CNN LSTM&#xff1a;CNN 抽取關鍵特征&#xff0c;LSTM 做時序邏輯&#xff1b;抽取視頻中關鍵 K 幀輸入 CNN 得到圖片特征&#xff0c;再輸入 LSTM&…