go-zero微服務入門案例

一、go-zero微服務環境安裝

  • 1、go-zero腳手架的安裝

    go install github.com/zeromicro/go-zero/tools/goctl@latest
    
  • 2、etcd的安裝下載地址根據自己電腦操作系統下載對應的版本,具體的使用自己查閱文章

二、創建一個user-rpc服務

  • 1、定義user.proto文件

    syntax = "proto3";package user;
    option go_package="./user";service User {rpc FindById(FindByIdReq) returns (FindByIdResp);
    }message FindByIdReq{int64 id = 1;
    }message FindByIdResp {int64 id = 1;string username = 2;
    }
    
  • 2、使用命令生成對應的項目文件

    goctl rpc protoc ./user.proto --go_out=. --go-grpc_out=. --zrpc_out=./
    
  • 3、安裝對應的依賴包

    go mod tidy
    
  • 4、運行user服務

    go run user.go
  • 5、在etcd中查看服務是否已經注冊成功

    etcdctl get --prefix user.rpc
    
  • 6、模擬業務代碼返回數據

    func (l *FindByIdLogic) FindById(in *user.FindByIdReq) (*user.FindByIdResp, error) {return &user.FindByIdResp{Id:       in.Id,Username: "哈哈哈",}, nil
    }
    
  • 7、使用apifox可以直接調用rpc的服務,引入文件

    在這里插入圖片描述

三、在提供restful api接口端調用rpc服務返回數據給前端

  • 1、創建一個user-api的項目

  • 2、創建描述文件

    syntax = "v1"type GetUserReq {Id int64 `path:"id"` // 主鍵id
    }type GetUserResp {Id int64 `json:"id"`              // 用戶idUsername string `json:"username"` // 用戶名
    }
    @server(prefix: api/v1/usergroup: user
    )
    service user-api {@doc "根據用戶id獲取用戶新"@handler GetUserByIdApiget /:id (GetUserReq) returns (GetUserResp)
    }
    
  • 3、使用腳本生成對應的項目文件

    goctl api go -api *.api -dir . --style=gozero
    
  • 4、在user-api的配置文件中引入rpc服務的配置

    Name: user-api
    Host: 0.0.0.0
    Port: 8888UserRpc:Etcd:Hosts:- 127.0.0.1:2379Key: user.rpc
    
  • 5、在apps/user-api/internal/config/config.go創建服務的配置

    type Config struct {rest.RestConfUserRpc zrpc.RpcClientConf
    }
    
  • 6、在apps/user-api/internal/svc/servicecontext.go依賴注入rpc服務

    type ServiceContext struct {Config  config.ConfigUserRpc userclient.User
    }func NewServiceContext(c config.Config) *ServiceContext {return &ServiceContext{Config:  c,UserRpc: userclient.NewUser(zrpc.MustNewClient(c.UserRpc)),}
    }
    
  • 7、模擬實現業務代碼

    func (l *GetUserByIdApiLogic) GetUserByIdApi(req *types.GetUserReq) (resp *types.GetUserResp, err error) {// 模擬業務開發findByIdResp, err := l.svcCtx.UserRpc.FindById(l.ctx, &user.FindByIdReq{Id: req.Id,})if err != nil {return &types.GetUserResp{}, errors.New("查詢失敗")}return &types.GetUserResp{Id:       findByIdResp.Id,Username: findByIdResp.Username,}, nil
    }
    
  • 8、直接瀏覽模擬請求http://localhost:8888/api/v1/user/1

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

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

相關文章

[BIOS]VSCode zx-6000 編譯問題

前提:Python 3.6.6及以上版本安裝成功,Python 3.6.6路徑加到了環境變量# DEVITS工具包準備好 問題:添加環境變量 1:出現環境變量錯誤,“py -3” is not installed or added to environment variables #先在C:\Windows里…

【Linux】系統部分——進程控制

11.進程控制 文章目錄 11.進程控制一、進程創建二、進程終止退出碼進程終止的方式 三、進程等待進程等待的方式獲取?進程status小程序阻塞與非阻塞等待 四、進程程序替換替換原理進程程序替換的接口——exec替換函數 五、總結 一、進程創建 之前學習了fork()函數創建子進程&a…

【讀論文】U-Net: Convolutional Networks for Biomedical Image Segmentation 卷積神經網絡

摘要1 Introduction2 Network Architecture3 Training3.1 Data Augmentation 4 Experiments5 Conclusion背景知識卷積激活函數池化上采樣、上池化、反卷積softmax 歸一化函數交叉熵損失 Olaf Ronneberger, Philipp Fischer, Thomas Brox Paper:https://arxiv.org/ab…

藍牙音樂(A2DP)音頻延遲的一些感想跟分析,讓你對A2DP體驗更佳深入

零.聲明 最近做藍牙協議棧的過程中遇到一些客戶偶爾提報音頻延遲的問題,所以引發了一些感想,跟大家分享下,音頻延遲主要的影響范圍是對一些要求實時性比較高的場景有比較差的體驗 連接藍牙看視頻的過程中,發現音畫不同步&#x…

MySQL 8.0 綠色版安裝和配置過程

MySQL作為云計算時代,被廣泛使用的一款數據庫,他的安裝方式有很多種,有yum安裝、rpm安裝、二進制文件安裝,當然也有本文提到的綠色版安裝,因綠色版與系統無關,且可快速復制生成,具有較強的優勢。…

AGV|無人叉車工業語音播報器|預警提示器LBE-LEX系列性能與接線說明

LBE-LEX系列AGV|無人叉車工業語音播報器|預警提示器,涵蓋LBE-LEI-M-00、LBE-LESM-00、LBE-LES-M-01、LBE-LEC-M-00、LBE-KEI-M-00、LBE-KES-M-00、LBE-KES-M-01、LBE-KEC-M-00等型號,適用于各種需要語音提示的場景,主要有AGV、AMR機器人、無人…

行為型設計模式之Interpreter(解釋器)

行為型設計模式之Interpreter(解釋器) 前言: 自己的話理解:自定義一個解釋器用來校驗參數或數據是否合法。 1)意圖 給定一個語言,定義它的文法的一種表示,并定義一個解釋器,這個解…

C++常用的企業級日志庫

黃老師跟大家推薦幾款在企業開發中最受歡迎的C++日志庫! 1. spdlog spdlog 是一個非常流行的開源C++日志庫,以其高性能和易用性著稱。它支持多線程、異步日志記錄以及多種格式化選項。 安裝 可以通過包管理器安裝,例如 vcpkg: vcpkg install spdlog示例代碼 #include…

Python讀取PDF:文本、圖片與文檔屬性

在日常的數據采集、文檔歸檔與信息挖掘過程中,PDF格式因其版式固定、內容穩定而被廣泛使用。Python 開發者若希望實現 PDF 內容的自動化提取,選擇一個易用且功能完善的庫至關重要。本文將介紹如何用Python實現 PDF文本讀取、圖片提取 以及 文檔屬性讀取 …

excel中數字不滿六位在左側前面補0的方法

如下圖“代碼”列,想要實現統一的六位,如果不足六位,在前面(左側)補0。 實現方法: 使用公式TEXT(A2,"000000")注意務必是用雙引號。 目標實現: 如果想要脫離原數據,復制…

軟考 系統架構設計師系列知識點之雜項集萃(82)

接前一篇文章:軟考 系統架構設計師系列知識點之雜項集萃(81) 第148題 “41”視圖主要用于描述系統邏輯架構,最早由Philippe Kruchten于1995年提出。其中( )視圖用于描述對象模型,并說明系統應該…

Langgraph實戰--自定義embeding

概述 在Langgraph中我想使用第三方的embeding接口來實現文本的embeding。但目前langchain只提供了兩個類,一個是AzureOpenAIEmbeddings,一個是:OpenAIEmbeddings。通過ChatOpenAI無法使用第三方的接口,例如:硅基流平臺…

(附實例代碼及圖示)混合策略實現 doc-doc 對稱檢索

HyDE 混合策略 在前面的文章中,學習的優化策略都是將對應的 查詢 生成 新查詢,通過 新查詢 來執行相應的檢索,但是在數據庫中存儲的數據一般都是 文檔 層面上的,數據會遠遠比 查詢 要大很多,所以 query 和 doc 之間是…

webui無法注冊如何配置

1. 初始登陸界面 docker部署的腳本為: docker run -d \ -p 8180:8080 --gpusall \ -v ollama:/root/.ollama \ -v /home/pretrained_model/output:/app/backend/output \ --name open-webui \ --restart always ghcr.io/open-webui/open-webui:ollama 2. 新增注冊入…

力扣 88.合并兩個有序數組

文章目錄 題目介紹題解 題目介紹 題解 法一&#xff1a;暴力法 class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {for(int i 0; i < n; i){nums1[mi] nums2[i];}Arrays.sort(nums1);} }法二&#xff1a;倒序雙指針 時間復雜度為O(mn) 從右…

conda入門

目錄 1. Conda 是什么&#xff1f;2. 為什么需要 Conda&#xff1f;它能解決什么問題&#xff1f;3. Conda 的核心組件和概念4. Conda 基本工作流程和常用命令5. Conda 的主要優勢6. Conda 與 Pip 的關系7. 何時使用 Conda&#xff1f; 1. Conda 是什么&#xff1f; 包管理器&…

UE 5 和simulink聯合仿真,如果先在UE5這一端結束Play,過一段時間以后**Unreal Engine 5** 中會出現顯存不足錯誤

提問 UE5報錯如圖。解析原因 回答 你遇到的這個錯誤提示是&#xff1a; “Out of video memory trying to allocate a rendering resource. Make sure your video card has the minimum required memory, try lowering the resolution and/or closing other applications tha…

第七十三篇 從電影院售票到停車場計數:生活場景解析Java原子類精髓

目錄 一、原子類基礎&#xff1a;電影院售票系統1.1 傳統售票的并發問題1.2 原子類解決方案 二、原子類家族&#xff1a;超市收銀系統2.1 基礎類型原子類2.2 數組類型原子類 三、CAS機制深度解析&#xff1a;停車場管理系統3.1 CAS工作原理3.2 車位計數器實現 四、高性能實踐&a…

Linux(線程控制)

一 線程的操作 1. 創建線程&#xff1a;pthread_create int pthread_create(pthread_t *thread, // 線程 idconst pthread_attr_t *attr, // 線程屬性設置void *(*start_routine) (void *), // 回調函數void *arg // 傳遞…

PL/SQLDeveloper中數值類型字段查詢后顯示為科學計數法的處理方式

PL/SQLDeveloper中數值類型字段查詢后顯示為科學計數法的處理方式 文章目錄 PL/SQLDeveloper中數值類型字段查詢后顯示為科學計數法的處理方式1. 查詢效果2. 處理方式3. 再次查詢 1. 查詢效果 2. 處理方式 3. 再次查詢