一文帶你快速入門 Go 語言微服務開發 - Dubbo Go 入門實踐總結

来源:https://www.cnblogs.com/apache-dubbo/archive/2022/11/29/16936001.html
-Advertisement-
Play Games

作者:陳昌浩 1 導讀 if…else…在代碼中經常使用,聽說可以通過Java 8的Function介面來消滅if…else…!Function介面是什麼?如果通過Function介面介面消滅if…else…呢?讓我們一起來探索一下吧。 2 Function介面 Function介面就是一個有且僅有 ...


更多詳細示例可直接訪問 Dubbo 官網 或搜索關註官方微信公眾號:Apache Dubbo

1. 安裝Go語言環境

建議使用最新版 go 1.17

go version >= go 1.15

【Go 語言官網下載地址】

將 $GOPATH/bin 加入環境變數

2. 安裝序列化工具protoc

【protoc 下載地址】

3. 安裝 dubbogo-cli 以及相關插件

執行以下指令安裝dubbogo-cli 至 $GOPATH/bin

$ export GOPROXY="https://goproxy.cn"
$ go install github.com/dubbogo/dubbogo-cli@latest
$ dubbogo-cli 
hello

安裝依賴的工具插件

$ dubbogo-cli install all            

確保上述安裝的工具位於在系統環境變數內

$ protoc --version
libprotoc 3.14.0
$ protoc-gen-go --version
protoc-gen-go v1.26.0
$ protoc-gen-go-triple --version
protoc-gen-go-triple 1.0.8

4. 生成 Demo 項目

使用安裝好的 dubbogo-cli 工具,創建demo工程。

$ mkdir quickstart
$ cd quickstart 
$ dubbogo-cli newDemo .
$ tree .
.
├── api
│   ├── samples_api.pb.go
│   ├── samples_api.proto
│   └── samples_api_triple.pb.go
├── go-client
│   ├── cmd
│   │   └── client.go
│   └── conf
│       └── dubbogo.yaml
├── go-server
│   ├── cmd
│   │   └── server.go
│   └── conf
│       └── dubbogo.yaml
└── go.mod

可看到生成的項目中包含一個 client 項目和一個 server 項目,以及相關的配置文件。

4.1 查看介面描述文件 helloworld.proto

syntax = "proto3";
package api;

option go_package = "./;api";

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (User) {}
  // Sends a greeting via stream
  rpc SayHelloStream (stream HelloRequest) returns (stream User) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message User {
  string name = 1;
  string id = 2;
  int32 age = 3;
}

demo項目中,預設生成了一個介面描述文件,介面服務名為 api.Greeter, 包含兩個 RPC 方法,入參為 HelloRequest,返回值為 User,兩個方法分別為普通 RPC 方法和 Streaming 類型 RPC 方法。

4.2 (*可選) 使用安裝好的編譯工具編譯 pb 介面

$ cd api
$ protoc --go_out=. --go-triple_out=. ./samples_api.proto

參數意義:--go_out=. 使用上述安裝的 protoc-gen-go 插件,生成文件到當前目錄,--go-triple_out=.使用上述安裝的 protoc-gen-go-triple 插件,生成文件到當前目錄。

執行該指令後,會生成兩個文件,分別是helloworld.pb (包含 proto 結構) 和 helloworld_triple.pb.go (包含 triple 協議介面)。

在 demo 工程中,預先生成好了這兩個文件,修改 .proto 文件後重新執行命令生成,即可覆蓋。

5. 開啟一次RPC調用

項目根目錄執行

$ go mod tidy

拉取到最新的框架依賴:

module helloworld

go 1.17

require (
	dubbo.apache.org/dubbo-go/v3 v3.0.1
	github.com/dubbogo/grpc-go v1.42.9
	github.com/dubbogo/triple v1.1.8
	google.golang.org/protobuf v1.27.1
)

require (
	...
)

先後啟動服務端和客戶端: 開啟兩個終端,在 go-server/cmd 和 go-client/cmd 文件夾下分別執行 go run . , 可在客戶端看到輸出:

client response result: name:"Hello laurence" id:"12345" age:21

獲得調用結果成功

6. 更多

細心的讀者可以發現,以上例子編寫的的服務端可以接受來自客戶端的普通RPC、流式RPC調用請求。目前只編寫了普通調用的Client,讀者可以根據 samples 庫中的例子來嘗試編寫流式客戶端和服務端。

更多samples可以參閱 dubbo-go-samples

搜索關註官方微信公眾號:Apache Dubbo,瞭解更多業界最新動態,掌握大廠面試必備 Dubbo 技能


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Filter過濾器02 5.Filter過濾器生命周期 Filter生命周期圖解 驗證-Tomcat來創建Filter實例,只會創建一個實例 package com.filter; import javax.servlet.*; import javax.servlet.http.HttpServl ...
  • 以前學習的過程中,有聽過 EasyExcel 這麼一個東西,不過從來沒用過,所以,正好藉此機會學習,看看如何使用它來實現需求。 在學習 EasyExcel 的這段時間里,也瞭解到工作中這種導入導出的需求還是挺常見的,所以決定記錄下來。 ...
  • 一.小結 1.字元串是封裝在String類中的對象。要創建一個字元串,可以使用11種構造方法之一,也可以使用字元串直接量進行簡捷初始化。 2.String對象是不可變的,它的內容不能改變。為了提高效率和節省記憶體,如果兩個直接量字元串有相同的字元序列,Java虛擬機就將它們存儲在一個對象中。這個獨特的 ...
  • layout: post categories: Java title: Java 中你絕對沒用過的一個關鍵字? tagline: by 子悠 tags: 子悠 前面的文章給大家介紹瞭如何自定義一個不可變類,沒看過的小伙伴建議去看一下,這節課給大家介紹一個 Java 中的一個關鍵字 Record,那 ...
  • 代碼1 #include <iostream> using namespace std; class A{ public: A(int _a):ma(_a){ cout<<"A()"<<endl; } ~A(){ cout<<"~A()"<<endl; } protected: int ma; }; ...
  • 您好,我是湘王,這是我的博客園,歡迎您來,歡迎您再來~ 有時某些業務或者功能,需要在用戶請求到來之前就進行一些判斷或執行某些動作,就像在Servlet中的FilterChain過濾器所做的那樣,Spring Security也有類似機制。Spring Security有三種增加過濾器的方式:addF ...
  • 初學flask部署,踩了一些坑記錄一下。 uwsgi配置 對於uwsgi的安裝不詳細描述 在centos7上部署flask 大型應用的時候會使用工廠模式create_app(),放置在一個module的__init__.py中, uwsgi配置的時候應該就不要使用 wsgi-file 來進行配置,查 ...
  • 1 準備工作 獲取class文件byte[] public static byte[] getFileBytes(File file) { try (FileInputStream fileInputStream = new FileInputStream(file)) { int availabl ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...