国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

介紹 dubbo-go 并在Mac上安裝,完成一次自己定義的接口RPC調(diào)用

這篇具有很好參考價(jià)值的文章主要介紹了介紹 dubbo-go 并在Mac上安裝,完成一次自己定義的接口RPC調(diào)用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

RPC 遠(yuǎn)程調(diào)用的說明

作用:像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程方法

和直接HTTP調(diào)用的區(qū)別:

  1. 對(duì)開發(fā)者更透明,減少了很多的溝通成本。
  2. RPC向遠(yuǎn)程服務(wù)器發(fā)送請(qǐng)求時(shí),未必要使用 HTTP 協(xié)議,比如還可以用 TCP / IP,性能更高(內(nèi)部服務(wù)更適用)。

調(diào)用模型圖示:

介紹 dubbo-go 并在Mac上安裝,完成一次自己定義的接口RPC調(diào)用,環(huán)境配置,框架應(yīng)用,macos,dubbo,golang

?? 注意:在整個(gè)流程中,最終的調(diào)用并不是由注冊(cè)中心來完成的。雖然注冊(cè)中心會(huì)提供信息,但實(shí)際上調(diào)用方需要自己進(jìn)行最后的調(diào)用動(dòng)作。注冊(cè)中心的作用是告訴調(diào)用方提供者的地址等信息,然后調(diào)用方會(huì)根據(jù)這些信息來完成最后的調(diào)用。

  1. 為什么一定要知道注冊(cè)中心的地址?
    因?yàn)榉?wù)提供者需要將自己提供的接口方法告知注冊(cè)中心,所以它必須知道注冊(cè)中心的地址,這樣才能將自己的信息上報(bào)給注冊(cè)中心,所以必須要配置注冊(cè)中心。同樣的道理,消費(fèi)者調(diào)用方也需要知道注冊(cè)中心的地址,以便將注冊(cè)中心的地址配置到項(xiàng)目中。

  2. IDL是什么?
    IDL(接口定義語言)是一種約定俗成的語言,用于定義接口和數(shù)據(jù)結(jié)構(gòu)的語法。它是一種人為約定的語言,通過這種語法,可以明確地定義接口和數(shù)據(jù)的結(jié)構(gòu),使各方在交流和協(xié)作時(shí)能夠達(dá)成一致。這種約定的語言為不同的系統(tǒng)、平臺(tái)或語言提供了一種統(tǒng)一的描述方式,使得不同環(huán)境下的應(yīng)用程序能夠理解和交互。

Dubbo 框架說明

Dubbo 是一個(gè)開源的高性能、輕量級(jí)的分布式服務(wù)框架,最初由阿里巴巴公司開發(fā)并開源。它提供了分布式服務(wù)治理、通信框架、智能負(fù)載均衡、容錯(cuò)策略等功能,用于幫助開發(fā)者構(gòu)建可擴(kuò)展、高性能、松耦合的分布式應(yīng)用。

Dubbo框架,是目前國內(nèi)非常主流的RPC實(shí)現(xiàn)框架。Dubbo底層用的是Triple協(xié)議:Triple協(xié)議。 —— Dubbo框架官方文檔

當(dāng)前,還有其他類似的框架,比如 GRPC 和 TRPC 等等,這些都是不同的 RPC 遠(yuǎn)程調(diào)用框架,Dubbo 和 GRPC 是比較知名的。

Dubbo 由阿里開發(fā),而 GRPC 是由 Google 開發(fā),TRPC 則是由騰訊開發(fā)。

Dubbo Go 介紹

Dubbo Go(也稱為 dubbo-go)是 Dubbo 框架的 Go 語言版本,是一個(gè)基于 Go 語言開發(fā)的分布式服務(wù)框架,用于構(gòu)建高性能、可擴(kuò)展的分布式應(yīng)用程序。它提供了與原始 Java 版本類似的功能,允許開發(fā)者使用 Go 語言構(gòu)建分布式應(yīng)用程序。dubbo-go 可以與 Java 版本的 Dubbo 框架無縫集成,使得在混合語言環(huán)境中開發(fā)分布式系統(tǒng)更加便捷。

dubbo-go 提供了對(duì) Dubbo 協(xié)議的支持,允許 Go 語言服務(wù)提供者和消費(fèi)者之間進(jìn)行通信,并利用 Dubbo 的治理能力實(shí)現(xiàn)服務(wù)注冊(cè)、發(fā)現(xiàn)、負(fù)載均衡等功能。它也支持多種序列化和網(wǎng)絡(luò)傳輸協(xié)議,以滿足不同場(chǎng)景的需求。

應(yīng)用 Dubbo Go

環(huán)境安裝(Mac 系統(tǒng))

安裝 Go語言環(huán)境

go version >= go 1.15。
【Go 語言官網(wǎng)下載地址】

安裝 序列化工具protoc

  1. 使用Homebrew安裝protoc:
    brew install protobuf
    
    這將會(huì)安裝 protobuf 和 protoc編譯器。
  2. 驗(yàn)證安裝:
    protoc --version
    
    如果一切正常,將顯示protoc的版本信息。

安裝 dubbogo-cli 以及相關(guān)插件

  1. 執(zhí)行以下指令安裝dubbogo-cli 至 $GOPATH/bin (控制臺(tái)輸入go env 可以看到GOPATH目錄所在)
    $ export GOPROXY="https://goproxy.cn"
    $ go install github.com/dubbogo/dubbogo-cli@latest
    $ dubbogo-cli
    hello
    
  2. 安裝依賴的工具插件
    dubbogo-cli install all    
    
  3. 確保上述安裝的工具位于在系統(tǒng)環(huán)境變量?jī)?nèi)
    $ protoc --version
    libprotoc 24.2
    
    $ protoc-gen-go --version
    protoc-gen-go v1.31.0
    
    $ protoc-gen-go-triple --version
    protoc-gen-go-triple 1.0.8
    
? 解決報(bào)錯(cuò):zsh: command not found: protoc-gen-go,而其他兩個(gè)工具都能正常輸出版本號(hào)信息。
解決:運(yùn)行 brew install protoc-gen-go 直接安裝 protoc-gen-go

運(yùn)行下面命令(For mac)直接安裝 protoc-gen-go,然后再次運(yùn)行 protoc-gen-go --version 檢測(cè)正常了。

brew install protoc-gen-go

完成一次自己定義接口的RPC調(diào)用

這里使用 IDL(接口調(diào)用語言)的方式使用dubbo:創(chuàng)建一個(gè)公共的接口定義文件,服務(wù)提供者和消費(fèi)者讀取這個(gè)文件。優(yōu)點(diǎn)是跨語言。

拉起一個(gè)注冊(cè)中心-Nacos,如果有現(xiàn)成的,本步驟可忽略,這里用docker快速啟動(dòng)一個(gè)nacos

Nacos 官方文檔

git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker
docker-compose -f example/standalone-derby.yaml up
? 解決報(bào)錯(cuò):no matching manifest for linux/arm64/v8 in the manifest list entries
原因:如下圖,nacos默認(rèn)不支持在ARM架構(gòu)安裝。只有AMD64版本的。

介紹 dubbo-go 并在Mac上安裝,完成一次自己定義的接口RPC調(diào)用,環(huán)境配置,框架應(yīng)用,macos,dubbo,golang

解決:去 docker hub 上搜索支持ARM架構(gòu)的鏡像。

介紹 dubbo-go 并在Mac上安裝,完成一次自己定義的接口RPC調(diào)用,環(huán)境配置,框架應(yīng)用,macos,dubbo,golang

# 下載鏡像
$ docker pull nacos/nacos-server:v2.1.2-slim
# 查看下載的鏡像
$ docker images
# 創(chuàng)建 docker-compose.yml
$ vim docker-compose.yml
# 啟動(dòng)該鏡像

編寫 docker-compose $ vim docker-compose.yml

version: '2'
services:
  nacos:
    image: nacos/nacos-server:v2.1.2-slim                        # 鏡像`nacos/nacos-server:v2.1.2-slim`
    container_name: nacos                                        # 容器名為'nacos'
    restart: always                                              # 指定容器退出后的重啟策略為始終重啟
    volumes:                                                     # 數(shù)據(jù)卷掛載路徑設(shè)置,將本機(jī)目錄映射到容器目錄
      - ./data/nacos/logs:/home/nacos/logs
    environment:
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
      MODE: standalone # 單機(jī)模式啟動(dòng)
    ports:                              # 映射端口
      - "8848:8848"
    cpu_shares: 4
    mem_limit: 2048M

啟動(dòng) nacos $ docker compose up
啟動(dòng)成功后,可以看到如下界面:
介紹 dubbo-go 并在Mac上安裝,完成一次自己定義的接口RPC調(diào)用,環(huán)境配置,框架應(yīng)用,macos,dubbo,golang
可以去 nacos 注冊(cè)中心看一下,訪問 http://自己服務(wù)的IP地址:8848/nacos/index.html
默認(rèn)用戶名和密碼都是 nacos

服務(wù)端實(shí)現(xiàn)

1. 創(chuàng)建一個(gè)IDC服務(wù)(服務(wù)端項(xiàng)目), dubbogo-cli newApp xxx
$ dubbogo-cli newApp IDC
$ cd IDC
2. 定義公共接口(只定義,不實(shí)現(xiàn)),api/api.proto 修改后如下:
syntax = "proto3";
package api;

option go_package = "./;api";

service Generator {
  rpc GetID (GenReq) returns (GenResp) {}
}

message GenReq {
  string appId = 1;
}

message GenResp {
  string id = 1;
}
3. 生成代碼 api_triple.pb.go、api.pb.go (通過運(yùn)行 protoc --go_out=. --go-triple_out=. ./api.proto
$ cd api
$ protoc --go_out=. --go-triple_out=. ./api.proto
4. 實(shí)現(xiàn)公共接口,pkg/service/service.go 修改后的代碼如下:
type GeneratorServerImpl struct {
	api.UnimplementedGeneratorServer
}

func (s *GeneratorServerImpl) GetID(ctx context.Context, in *api.GenReq) (*api.GenResp, error) {
	logger.Infof("Dubbo-go GeneratorProvider AppId = %s\n", in.AppId)
	uuid, err := uuid.NewV4()
	if err != nil {
		logger.Infof("Dubbo-go GeneratorProvider get id err = %v\n", err)
		return nil, err
	}
	return &api.GenResp{Id: uuid.String()}, nil
}

func init() {
	config.SetProviderService(&GeneratorServerImpl{})
}
5. 編寫 conf/dubbogo.yaml 配置
dubbo:
  registries:
    nacos:
      protocol: nacos
      address: 127.0.0.1:8848
  protocols:
    triple:
      name: tri
      port: 20000
  provider:
    services:
      GeneratorServerImpl:
        interface: "" # read from stub
6. 配置環(huán)境變量DUBBO_GO_CONFIG_PATH

Dubbo-go 并沒有提供直接設(shè)置配置文件路徑的函數(shù)。Dubbo-go 配置文件是通過環(huán)境變量 DUBBO_GO_CONFIG_PATH 或者在啟動(dòng)應(yīng)用程序時(shí)通過命令行參數(shù)傳遞的。

方式1:在控制臺(tái),設(shè)置 DUBBO_GO_CONFIG_PATH 環(huán)境變量
export DUBBO_GO_CONFIG_PATH=conf/dubbogo.yaml 
方式2:在代碼中,使用命令行參數(shù)指定配置文件路徑

將 “path/to/config.yaml” 替換為實(shí)際的配置文件路徑。這樣,你可以在運(yùn)行應(yīng)用程序時(shí)指定不同的配置文件路徑。文章來源地址http://www.zghlxwxcb.cn/news/detail-695858.html

package main

import (
    "flag"
    "fmt"
    "os"

    "dubbo.apache.org/dubbo-go/v3/config"
)

func main() {
    // 使用flag包來處理命令行參數(shù),將-config參數(shù)用于指定配置文件路徑
    configFile := flag.String("config", "path/to/config.yaml", "Path to Dubbo-go config file")
    flag.Parse()

    // 使用os.Setenv 設(shè)置 DUBBO_GO_CONFIG_PATH 環(huán)境變量
    os.Setenv("DUBBO_GO_CONFIG_PATH", *configFile)

    // 加載 Dubbo-go 配置
    if err := config.Load(); err != nil {
        panic(err)
    }

    // 在這里執(zhí)行你的 Dubbo-go 應(yīng)用程序邏輯
    fmt.Println("Dubbo-go 應(yīng)用程序已啟動(dòng)")
}
7. 最后,啟動(dòng)服務(wù)端
go run cmd/app.go  

打開nacos的控制臺(tái),可以看到服務(wù)已經(jīng)注冊(cè)
介紹 dubbo-go 并在Mac上安裝,完成一次自己定義的接口RPC調(diào)用,環(huán)境配置,框架應(yīng)用,macos,dubbo,golang

客戶端使用

1. 創(chuàng)建一個(gè)客戶端項(xiàng)目,go mod init 客戶端項(xiàng)目包名
2. 復(fù)制服務(wù)端的api文件夾給客戶端
3. 構(gòu)造客戶端項(xiàng)目,目錄如下:

介紹 dubbo-go 并在Mac上安裝,完成一次自己定義的接口RPC調(diào)用,環(huán)境配置,框架應(yīng)用,macos,dubbo,golang
這里的api 目錄與服務(wù)端的api目錄保持一致。

4. 編寫 cmd/client.go 的客戶端遠(yuǎn)程調(diào)用代碼
var grpcGeneratorImpl = new(api.GeneratorClientImpl)

func main() {
	config.SetConsumerService(grpcGeneratorImpl)
	if err := config.Load(); err != nil {
		panic(err)
	}

	logger.Info("start to test dubbo")
	req := &api.GenReq{
		AppId: "laurence",
	}
	reply, err := grpcGeneratorImpl.GetID(context.Background(), req)
	if err != nil {
		logger.Error(err)
	}
	logger.Infof("get id result: %v\n", reply.Id)
}
5. 編寫 conf/dubbogo.yml 配置
dubbo:
  registries:
    nacos:
      protocol: nacos
      address: 127.0.0.1:8848
  consumer:
    references:
      GeneratorClientImpl:
        protocol: tri
        interface: ""
6. 配置環(huán)境變量DUBBO_GO_CONFIG_PATH

Dubbo-go 并沒有提供直接設(shè)置配置文件路徑的函數(shù)。Dubbo-go 配置文件是通過環(huán)境變量 DUBBO_GO_CONFIG_PATH 或者在啟動(dòng)應(yīng)用程序時(shí)通過命令行參數(shù)傳遞的。

方式1:在控制臺(tái),設(shè)置 DUBBO_GO_CONFIG_PATH 環(huán)境變量
export DUBBO_GO_CONFIG_PATH=conf/dubbogo.yaml 
方式2:在代碼中,使用命令行參數(shù)指定配置文件路徑

將 “path/to/config.yaml” 替換為實(shí)際的配置文件路徑。這樣,你可以在運(yùn)行應(yīng)用程序時(shí)指定不同的配置文件路徑。

package main

import (
    "flag"
    "os"
)

func main() {
    // 使用flag包來處理命令行參數(shù),將-config參數(shù)用于指定配置文件路徑
    configFile := flag.String("config", "path/to/config.yaml", "Path to Dubbo-go config file")
    flag.Parse()

    // 使用os.Setenv 設(shè)置 DUBBO_GO_CONFIG_PATH 環(huán)境變量
    os.Setenv("DUBBO_GO_CONFIG_PATH", *configFile)
}
7. 最后,運(yùn)行client客戶端
go run cmd/client.go

到了這里,關(guān)于介紹 dubbo-go 并在Mac上安裝,完成一次自己定義的接口RPC調(diào)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 記錄一次M1芯片Mac折騰安裝Python3的過程

    記錄一次M1芯片Mac折騰安裝Python3的過程

    前言:是要用python搞一個(gè)跟url接口交互的腳本,來配合做服務(wù)遷移工作,但在開發(fā)和測(cè)試腳本是讓python環(huán)境卡住了脖(電腦裝了很多個(gè)python,并且多版本間管理的比較混亂)所以想先調(diào)試好一個(gè)版本 能用就好;并且腳本用到requests庫,需要給python安裝一下。 總結(jié)兩件事: 裝

    2024年02月16日
    瀏覽(20)
  • 記一次Mac M1安裝Node并且構(gòu)建Vue項(xiàng)目的經(jīng)歷

    記一次Mac M1安裝Node并且構(gòu)建Vue項(xiàng)目的經(jīng)歷

    最近需要拉公司的Vue項(xiàng)目到本地,但是筆者作為后端人員在安裝Node的過程中遇到挺多問題。所以記錄一下,希望能幫到大家。 筆者運(yùn)行電腦環(huán)境: Mac M1芯片版本 macos ventura 13.0.1 沒有安裝過node、homebrew的機(jī)器 接下來開始進(jìn)入安裝正題? 一、安裝HomeBrew 安裝HomeBrew這一塊一般是

    2024年01月15日
    瀏覽(22)
  • 【GoLang】MAC安裝Go語言環(huán)境

    【GoLang】MAC安裝Go語言環(huán)境

    小試牛刀 首先安裝VScode軟件 或者pycharm mac安裝brew軟件? brew install go 報(bào)了一個(gè)錯(cuò)誤 不提供這個(gè)支持? 重新brew install go 之后又重新brew reinstall go 使用go version 可以看到go 的版本 使用go env ?可以看到go安裝后的配置 配置一個(gè)環(huán)境變量 vim ~/.zshrc, ?

    2024年02月15日
    瀏覽(28)
  • Mac電腦上如何安裝最新版本的Go

    Mac電腦上如何安裝最新版本的Go

    在Mac電腦上安裝最新版本的Go語言環(huán)境,可以遵循以下步驟: 訪問官方網(wǎng)站 https://golang.org/dl/ ,下載適合Mac系統(tǒng)的壓縮包。建議選擇最新版本的64位壓縮包。 ? ? 下載完成后雙擊打開壓縮包,并將解壓出來的文件夾重命名為\\\"go\\\",并移動(dòng)到你喜歡的位置(如 /usr/local 目錄下)。

    2024年02月14日
    瀏覽(38)
  • 使用GO編譯wasm文件并在nodejs中使用

    1. 原生JS直接計(jì)算 2. 原生GO直接計(jì)算 3. GO打包成WASM包由JS進(jìn)行調(diào)用 GO文件 打包命令: GOOS=js GOARCH=wasm go build -o ./fibonacci.wasm fibonacci.go 調(diào)用was_exec.js文件完成WebAssembly運(yùn)行時(shí)環(huán)境初始化 JS調(diào)用wasm文件執(zhí)行 4. TinyGo打包成wasm包運(yùn)行 Go文件 打包命令 tinygo build -o tinygo_fibonacci.wasm -targe

    2024年02月13日
    瀏覽(15)
  • 記一次dubbo消費(fèi)者注冊(cè)失敗找不到服務(wù)提供者問題

    項(xiàng)目分多套環(huán)境,其中一套環(huán)境重新部署時(shí),頻繁出現(xiàn)消費(fèi)者找不到服務(wù)提供者的錯(cuò)誤 經(jīng)過多次重啟后才有可能恢復(fù)正常,而其他環(huán)境并沒有發(fā)現(xiàn)此問題 懷疑點(diǎn): 1.消費(fèi)者和服務(wù)提供者dubbo版本對(duì)不上 2.服務(wù)提供者沒有注冊(cè)上服務(wù) 3.注冊(cè)中心有問題 逐一排查: 1.消費(fèi)者和服

    2023年04月18日
    瀏覽(20)
  • 從GitHub上新拉一個(gè)項(xiàng)目并在mac系統(tǒng)下運(yùn)行遇到的種種問題

    從GitHub上新拉一個(gè)項(xiàng)目并在mac系統(tǒng)下運(yùn)行遇到的種種問題

    如果項(xiàng)目已經(jīng)被拉下來,現(xiàn)在我們要啟動(dòng)項(xiàng)目。 step1、需要了解該項(xiàng)目是什么,它的作用是什么,以及它可以解決的問題。閱讀項(xiàng)目的介紹、文檔和示例,確保對(duì)項(xiàng)目有一個(gè)基本的認(rèn)識(shí)。 step2、設(shè)置開發(fā)環(huán)境:確保您的開發(fā)環(huán)境中安裝了所需的工具和軟件,例如文本編輯器(

    2024年02月11日
    瀏覽(80)
  • 干翻Dubbo系列第十二篇:Dubbo協(xié)議介紹

    干翻Dubbo系列第十二篇:Dubbo協(xié)議介紹

    文章目錄 文章說明 一:Dubbo協(xié)議 1:Dubbo協(xié)議簡(jiǎn)介 2:Dubbo協(xié)議優(yōu)點(diǎn) ?3:Dubbo協(xié)議幀的組成 (一):幻數(shù) (二):2Way (三):event (四):Serilization ID (五):status (六):RequestID (七):數(shù)據(jù)長度 ????????Rpc過程當(dāng)中三個(gè)核心的要素就是: 協(xié)議、序列化 、通信方式 ????????Dubbo協(xié)議

    2024年02月12日
    瀏覽(21)
  • Docker的相關(guān)知識(shí)介紹以及mac環(huán)境的安裝

    Docker的相關(guān)知識(shí)介紹以及mac環(huán)境的安裝

    大型項(xiàng)目組件較多,運(yùn)行環(huán)境也較為復(fù)雜,部署時(shí)會(huì)碰到一些問題: 依賴關(guān)系復(fù)雜,容易出現(xiàn)兼容性問題 開發(fā)、測(cè)試、生產(chǎn)環(huán)境有差異 Docker就是來解決這些問題的。Docker是一個(gè)快速交付應(yīng)用、運(yùn)行應(yīng)用的技術(shù):可以將程序及其依賴、運(yùn)行環(huán)境一起打包為一個(gè)鏡像,可以遷移

    2024年02月05日
    瀏覽(31)
  • 【go-zero】go-zero阿里云oss 前端上傳文件到go-zero API服務(wù) 并在k8s pod中創(chuàng)建文件 并推送到阿里云oss 最佳實(shí)踐

    問題:在本地通過上傳文件,然后將文件推送到aliyun的oss中,是沒問題的 但是部署到了k8s中,則出現(xiàn)了問題,一直報(bào)錯(cuò)沒有創(chuàng)建的權(quán)限 思路:開始認(rèn)為應(yīng)該將該文件掛載到configmap中,然后通過這種方式修改了deployment和dockerfile。最終發(fā)現(xiàn)應(yīng)該是go的創(chuàng)建文件路徑方式搞錯(cuò)了,

    2024年02月13日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包