因為基於Dapr的服務架構是不限語言的,我們來看看Dapr的跨語言開發。我們使用golang,python,.NET來實現跨語言的服務呼叫,拓撲如下
我們繼續使用.NET 5的fontend和backend,新增python的flask服務,新增golang的beego服務。
1.新增python的flask服務
新增python虛擬環境flask_env
mkvirtualenv flask_env
進入flask_env,安裝flask和dapr
pip install flask
pip install dapr
新增簡單的flask服務,結構如下
指定服務埠5003,並呼叫frontend的Dapr/ip介面
from flask import Flask from dapr.clients import DaprClient app = Flask(__name__) @app.route("/") def call_frontend(): with DaprClient() as d: res = d.invoke_method('frontend','Dapr/ip',None) return res.text() app.run(port=5003)
2.新增golang的beego服務
安裝beego
go get github.com/beego/bee/v2
新增beego服務
bee new goapi
專案結構如下
修改conf/app.conf中的監聽埠5004
appname = daprapi
httpport = 5004
runmode = dev
修改controllers/default.go api,呼叫pythonapi的介面/
package controllers import ( beego "github.com/beego/beego/v2/server/web" dapr "github.com/dapr/go-sdk/client" "context" ) type MainController struct { beego.Controller } func (c *MainController) Get() { ctx := context.Background() client, err := dapr.NewClient() if err != nil{ c.Data["json"] = err.Error() c.ServeJSON() } // defer client.Close() resp, err := client.InvokeMethod(ctx, "pythonapi", "/", "get") if err != nil{ c.Data["json"] = err.Error() c.ServeJSON() } c.Data["json"] = string(resp) c.ServeJSON() }
3.啟動服務並測試
啟動backend
dapr run --dapr-http-port 3511 --app-port 5000 --app-id backend dotnet .\BackEnd\bin\Debug\net5.0\BackEnd.dll
啟動frontend
dapr run --dapr-http-port 3501 --app-port 5001 --app-id frontend dotnet .\FrontEnd\bin\Debug\net5.0\FrontEnd.dll
啟動pythonapi
dapr run --dapr-http-port 3503 --app-port 5003 --app-id pythonapi python ./flaskapi/app.py
啟動goapi
dapr run --dapr-http-port 3504 --app-port 5004 --app-id goapi bee run
現在呼叫goapi的預設介面,呼叫成功!!