微服務架構是用來替換傳統的單體架構的。它使用細顆粒度的服務及其組合來完成乙個業務系統的工作。服務間是以一種約定來進行通訊。微服務架構會帶來如下的好處:
當談論微服務時,服務的編排和發現是非常重要的。例如kubernetes就用於編排docker容器。通常來說乙個微服務對應乙個容器是乙個比較好的實踐。
服務發現是乙個自動化發現乙個微服務例項的ip位址的過程。服務發現避免了硬編碼ip位址的問題。
netflix』s eureka和spring boot是非常有名的用於建立微服務的框架。 go micro提供了同樣的能力。它是乙個使用golang建立微服務的工具集。它非常輕量化,這意味在開始使用時它比較容易上手,而且體積會比較小,但隨著服務數量增加和業務的複雜化,它也可以變得很大。
它建立微服務的方式對於golang開發者來說非常友好。go micro可以使用外掛程式進行特性的擴充,go micro支援以下特性:
下面我們就進行具體的微服務開發工作,在這裡我們的客戶端和服務端通過grpc進行通訊
首先我們需要使用protocol buffers對我們的服務進行定義:
syntax =
"proto3"
;option go_package =
"protofiles"
;service encrypter
rpc decrypt
(request)
returns
(response)
}message request
message response
在我們定義完服務後,就可以在專案根目錄下使用如下命令進行編譯:
protoc -i=. --micro_out=. --go_out=. protofiles/encryption.proto
引數說明引數
說明-i
指定專案的根目錄
–go_out
指定自動產生的golang**的儲存位置
–micro_out
與go_out類似,指定的是自動產生的與go micro相關的**檔案的儲存位置
protofiles/encryption.proto
指定要編譯的protocal buffers檔案
在成功完成命令後,會在protofiles目錄下生成新的**檔案:
在成功編譯protocal buffers檔案後,在新生成的檔案encryption.micor.pb.go中有個比較重要的介面定義:
type encrypterhandler inte***ce
我們的服務邏輯就在乙個實現了entrypterhandler介面的結構體中進行定義:
type encrypter struct
func
(g encrypter)
encrypt
(c context.context, request *protofiles.request, response *protofiles.response)
error
func
(g encrypter)
decrypt
(c context.context, request *protofiles.request, response *protofiles.response)
error
在我們完成服務邏輯的開發後,我們會把這個服務註冊到服務發現中心上,以便供其他服務或客戶端使用:
}在這裡我們建立了乙個服務的例項,然後我們建立的服務實現的結構體註冊到這個例項上。
在完成了服務註冊後,我們就可以執行這個服務了。當終端顯示如下資訊時,就表示我們的服務已經啟動成功,並可對外提供服務了:
在這裡我們會看到由於我們沒有指定特定的服務發現機制,所以go micro會預設使用mdns作為服務發現機制。
這樣我們就完成了乙個非常簡單的服務,下面我們會編寫乙個客戶端程式呼叫這個服務。
在服務端開發和客戶端開發過程中,最大的區別是我們是使用proto.newencrypterservice來建立服務例項,然後我們使用這個例項來進行服務呼叫。注意這個函式是protoc命令自動生成的。
為了開發客戶端,我們要使用服務定義中的protocal buffers檔案,經過編譯形成客戶端樁**,另一種簡單的方式就是直接拷貝服務端生成的**直接拷貝到客戶端開發專案中即可。
}這樣我們就完成客戶端的開發,在這裡需要注意幾點:
在我們建立服務例項時,我們指定的名字需要和服務註冊的名字一致,否則會出現找不到服務的問題;
在客戶端的過程中,我們只需要使用服務的名字即可,並不需要指定服務所在的ip位址,這個名稱和位址的對映是由服務註冊中心完成的。另外由於避免了ip位址硬編碼的問題,提高了整體程式的靈活性。
Go Micro 微服務總結
go micro 微服務總結 對外提供restful.api 服務的是通過 api 框架或原生寫法 直接呼叫的是 srv 內部呼叫是客戶端去訪問服務端 直接 rpc 呼叫的時候會繞過 restful.api 但是 micro api 閘道器是必須啟動的,閘道器也可配置 直接呼叫srv http請求 ...
go micro 微服務學習筆記(2)
通過.proto自動生成json介面資料時,會預設新增omitempty,此時若字段為空 例如空串,0,nil 則返回的json資料會忽略該欄位,如下圖自動生成的資料。通過查閱其原始碼 路徑protoc gen micro generator generator.go 可以發現其生成時會自動新增 o...
go微服務系列 一 go micro入門
2.go micro入門 3.結合consul進行服務註冊 發現 它是乙個可插入的rpc框架,用於在go中編寫微服務。開箱即用,您將收到 go 微體系結構可以描述為三層堆疊 頂層由客戶端 伺服器模型和服務抽象組成。底層由以下型別的外掛程式組成 sidecar提供服務註冊,grpc編碼 解碼和http...