マイクロAPI
非常に強力なマイクロ、この記事では、コマンドラインマイクロAPIの機能を詳細に説明します
3回を言うために重要なことを
- 本論文では、すべてのコードhttps://idea.techidea8.com/open/idea.shtml?id=6
- 本論文では、すべてのコードhttps://idea.techidea8.com/open/idea.shtml?id=6
- 本論文では、すべてのコードhttps://idea.techidea8.com/open/idea.shtml?id=6
主な役割
主な役割は、マイクロHTTPゲートウェイサービスのサポートを提供することです。場合は、バックエンドサービスの名前はgo.micro.srv.hello
、提供するcall
方法を、私たちは、httpプロトコルを介してマイクロサービスを呼び出すために使用されます。
curl http://127.0.0.0:8080/hello/call?name=123
micro api
指示に従って、すべてのパラメータ
$micro api -h
NAME:
micro api - Run the api gateway
USAGE:
micro api [command options] [arguments...]
OPTIONS:
--address value Set the api address e.g 0.0.0.0:8080 [%MICRO_API_ADDRESS%]
--handler value Specify the request handler to be used for mapping HTTP requests to services; {api, event, http, rpc} [%MICRO_API_HANDLER%]
--namespace value Set the namespace used by the API e.g. com.example.api [%MICRO_API_NAMESPACE%]
--resolver value Set the hostname resolver used by the API {host, path, grpc} [%MICRO_API_RESOLVER%]
--enable_rpc Enable call the backend directly via /rpc [%MICRO_API_ENABLE_RPC%]
何を翻訳
--address value 设置网关访问的ip和端口,如设置成0.0.0.0:8080,则可以通过http://127.0.0.1:8080/进行访问,默认为0.0.0.0:8080
--handler value 指定映射具体哪种类型的处理程序,可选择{api, event, http, rpc} ,默认是rpc
--namespace value 指定暴露哪些微服务,通过命名空间匹配,如指定value为`go.micro.srv`,则该空间下所有微服务都能被访问
--resolver value 路径和微服务的对应关系,默认是micro,可选项为{host, path, grpc}
--enable_rpc 是否支持直接通过rcp接口进行访问,默认false
apihander
私たちは、--handler=api
のhttp達成するために、オプションを入力しapi
、次のようにコードを読んで、処理サービスの種類との間のマッピングを
- ダウンロード
handlerapi.zip
して解凍し%GOPATH%/techidea8.com/microapp/doc/
たディレクトリがあるの後に次のように解凍
E:\winlion\gopath\src\techidea8.com\microapp\doc\handerapi>ls
go.mod go.sum handerapi.go proto/
- 初期化モジュール
#这一步必须做,否则会报错`build command-line-arguments: cannot load techidea8.com/microapp/doc/handerapi/proto:`
>go mod init
>go: creating new go.mod: module techidea8.com/microapp/doc/handerapi
- プロトファイルの生成、GOPATH自身のパスを交換してください。
>protoc --proto_path=E:/winlion/gopath/src --proto_path=. --go_out=. --micro_out=. proto/handerapi.proto
#注意网络上很多文档使用--proto_path=import_proto_path:. 这种格式指定path但是在win10这种格式是行不通的
#另外一种可行的格式是 -IE:/winlion/gopath/src -I. 如下也是可行的
>protoc -IE:/winlion/gopath/src -I. --go_out=. --micro_out=. proto/handerapi.proto
- ラン
>go run handerapi.go
2019/08/24 20:59:32 Transport [http] Listening on [::]:54208
2019/08/24 20:59:32 Broker [http] Connected to [::]:54209
2019/08/24 20:59:32 Registry [mdns] Registering node: go.micro.api.example-71c8b1fa-f84b-4cf6-957f-617f67a4083c
- サービスの状態を確認してください
>micro list services
go.micro.api
go.micro.api.example
- テスト
>curl "http://localhost:8080/example/example1/func1?name=winlion"
{"msg":"我们已经收到你的请求啦winlion"}
eventhander
私たちは、合格--handler=event
リリースを達成するためのオプションをevent
次のようにキーコードが解釈され、イベントを
- ダウンロード
handlerevent.zip
して解凍し%GOPATH%/techidea8.com/microapp/doc/
たディレクトリがあるの後に次のように解凍
E:\winlion\gopath\src\techidea8.com\microapp\doc\handlerevent>ls
handlerevent.go
コア・コードは次の通りであります
service := micro.NewService(micro.Name("test1"))
service.Init()
//订阅go.micro.evt.test事件,注意这个test
micro.RegisterSubscriber("go.micro.evt.test", service.Server(), new(TestEvent))
if err := service.Run(); err != nil {
log.Fatal(err)
}
- サービスを実行します
>go run handlerevent.go
2019/08/24 23:17:18 Transport [http] Listening on [::]:57093
2019/08/24 23:17:18 Broker [http] Connected to [::]:57094
2019/08/24 23:17:19 Registry [mdns] Registering node: test1-7efd3b0a-5455-4456-870d-3b34e80f1354
2019/08/24 23:17:19 Subscribing test1-7efd3b0a-5455-4456-870d-3b34e80f1354 to topic: go.micro.evt.test
- サービスの状態を確認してください
>micro list services
go.micro.api
test1
topic:go.micro.evt.test
- イベント公開のサポートを開始
>micro api --handler=event --namespace=go.micro.evt
2019/08/24 23:06:28 Registering API Event Handler at /
2019/08/24 23:06:28 HTTP API Listening on [::]:8080
2019/08/24 23:06:28 Transport [http] Listening on [::]:56778
2019/08/24 23:06:28 Broker [http] Connected to [::]:56779
2019/08/24 23:06:28 Registry [mdns] Registering node: go.micro.api-c342fe3f-4a06-4955-be3f-79284e580467
- テスト
>curl -d "{\"message\": \"Hello,Winlion\"}" "http://localhost:8080/test/login" -X POST
#服务器侧会显示如下数据
>2019/08/24 23:18:54 Process 收到事件 login {"message": "Hello,Winlion"}
、カールJSONデータによって公開され、勝利のシステムでは、なお二重引用符を必要とし、エスケープ文字の使用が必要で
\
、HTTPに注意してください:// localhostを:8080 /テスト /ログインテストgo.micro.evt.testに対応するテストを
eventhander
私たちは、合格--handler=event
リリースを達成するためのオプションをevent
次のようにキーコードが解釈され、イベントを
- ダウンロード
handlerevent.zip
して解凍し%GOPATH%/techidea8.com/microapp/doc/
たディレクトリがあるの後に次のように解凍
E:\winlion\gopath\src\techidea8.com\microapp\doc\handlerevent>ls
handlerevent.go
コア・コードは次の通りであります
service := micro.NewService(micro.Name("test1"))
service.Init()
//订阅go.micro.evt.test事件,注意这个test
micro.RegisterSubscriber("go.micro.evt.test", service.Server(), new(TestEvent))
if err := service.Run(); err != nil {
log.Fatal(err)
}
- サービスを実行します
>go run handlerevent.go
2019/08/24 23:17:18 Transport [http] Listening on [::]:57093
2019/08/24 23:17:18 Broker [http] Connected to [::]:57094
2019/08/24 23:17:19 Registry [mdns] Registering node: test1-7efd3b0a-5455-4456-870d-3b34e80f1354
2019/08/24 23:17:19 Subscribing test1-7efd3b0a-5455-4456-870d-3b34e80f1354 to topic: go.micro.evt.test
- サービスの状態を確認してください
>micro list services
go.micro.api
test1
topic:go.micro.evt.test
- イベント公開のサポートを開始
>micro api --handler=event --namespace=go.micro.evt
2019/08/24 23:06:28 Registering API Event Handler at /
2019/08/24 23:06:28 HTTP API Listening on [::]:8080
2019/08/24 23:06:28 Transport [http] Listening on [::]:56778
2019/08/24 23:06:28 Broker [http] Connected to [::]:56779
2019/08/24 23:06:28 Registry [mdns] Registering node: go.micro.api-c342fe3f-4a06-4955-be3f-79284e580467
- テスト
>curl -d "{\"message\": \"Hello,Winlion\"}" "http://localhost:8080/test/login" -X POST
#服务器侧会显示如下数据
>2019/08/24 23:18:54 Process 收到事件 login {"message": "Hello,Winlion"}
、カールJSONデータによって公開され、勝利のシステムでは、なお二重引用符を必要とし、エスケープ文字の使用が必要で
\
、HTTPに注意してください:// localhostを:8080 /テスト /ログインテストgo.micro.evt.testに対応するテストを
rpchander
私たちは、--handler=rpc
のhttp達成するために、オプションを入力rpc
・非常に似て、あなたはhandlerrpc `としてapihanlder関連するコード、rpchanderコードパッケージを参照することができますされているサービスは、RPC APIの種類と型の間のマッピングを
- ダウンロード
handlerrpc.zip
して解凍し%GOPATH%/techidea8.com/microapp/doc/
たディレクトリがあるの後に次のように解凍
E:\winlion\gopath\src\techidea8.com\microapp\doc\handlerrpc>ls
handerapi.go proto/
- 初期化モジュール
#这一步必须做,否则会报错`build command-line-arguments: cannot load techidea8.com/microapp/doc/handerapi/proto:`
>go mod init
>go: creating new go.mod: module techidea8.com/microapp/doc/handlerrpc
- プロトファイルの生成、GOPATH自身のパスを交換してください。
>protoc --proto_path=. --go_out=. --micro_out=. proto/handlerrpc.proto
#注意网络上很多文档使用--proto_path=import_proto_path:. 这种格式指定path但是在win10这种格式是行不通的
#另外一种可行的格式是 -IE:/winlion/gopath/src -I. 如下也是可行的
>protoc -IE:/winlion/gopath/src -I. --go_out=. --micro_out=. proto/handerapi.proto
- ラン
>go run handlerrpc.go
2019/08/24 20:59:32 Transport [http] Listening on [::]:54208
2019/08/24 20:59:32 Broker [http] Connected to [::]:54209
2019/08/24 20:59:32 Registry [mdns] Registering node: go.micro.api.example-71c8b1fa-f84b-4cf6-957f-617f67a4083c
- サービスの状態を確認してください
>micro list services
go.micro.api
go.micro.api.model1
- テスト
>curl -H "Content-Type: application/json" -d "{\"arg\": \"Winlion\"}" "http://localhost:8080/model1/model1/action1"
{"data":"接收到数据Winlion"}
そして、APIハンドラrpchandler差は基礎RPCに再びapihandlerクロスプロトモデルデータパッケージに位置しています。
httphander
我々は--handler=http
、オプションを入力しhttp
、次のようにサービスマッピングサービスは、コアコードがあります
- 新しい
handlerweb.go
コードは以下の通りです
//handlerweb.go
package main
import (
"encoding/json"
"log"
"net/http"
"github.com/micro/go-micro/web"
)
//hello 处理函数,打印helloworld
func hello(w http.ResponseWriter, req *http.Request) {
//json支持
w.Header().Add("content-type", "application/json;charset=utf-8")
if err := json.NewEncoder(w).Encode(map[string]interface{}{
"code": 0,
"message": "hello,world",
}); err != nil {
//页面报错显示信息
http.Error(w, err.Error(), http.StatusNotFound)
}
}
func main() {
//new 一个web服务
service := web.NewService(web.Name("go.micro.web.hello"))
//绑定映射方法
service.HandleFunc("/", hello)
//初始化
service.Init()
//运行
if err := service.Run(); err != nil {
log.Fatal(err)
}
}
- アプリケーションを起動します
>go run handlerweb.go
2019/08/24 23:58:14 Listening on [::]:57984
- APIサービスを開始
>micro api --handler=http --namespace=go.micro.web
2019/08/24 23:58:42 Registering API HTTP Handler at /{service:[a-zA-Z0-9]+}
2019/08/24 23:58:42 HTTP API Listening on [::]:8080
2019/08/24 23:58:42 Transport [http] Listening on [::]:57992
2019/08/24 23:58:42 Broker [http] Connected to [::]:57993
2019/08/24 23:58:42 Registry [mdns] Registering node: go.micro.api-fecb79d6-0175-4d1c-9243-29c1d616b70d
- テスト
>curl http://127.0.0.1:8080/hello/
{"code":0,"message":"hello,world"}
#注意其中的hello 对应微服务`go.micro.web.hello`中的hello
enable_rpc
この効果は、インターフェースを介して真enable_rpc =は、以下へのアクセスを提供設け、RPC直接アクセス支持体上にあります
- オープンRPCサポート
>>micro api --handler=rpc --namespace=go.micro.api --enable_rpc=true
- 新しいマイクロサービス
>micro new --type=srv techidea8.com/microapp/doc/enablerpc
Creating service go.micro.srv.enablerpc in E:\winlion\gopath\src\techidea8.com\microapp\doc\e
.
├── main.go
├── plugin.go
├── handler
│ └── enablerpc.go
├── subscriber
│ └── enablerpc.go
├── proto\enablerpc
│ └── enablerpc.proto
├── Dockerfile
├── Makefile
├── README.md
└── go.mod
download protobuf for micro:
brew install protobuf
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
go get -u github.com/micro/protoc-gen-micro
compile the proto file enablerpc.proto:
cd E:\winlion\gopath\src\techidea8.com\microapp\doc\enablerpc
protoc --proto_path=.:$GOPATH/src --go_out=. --micro_out=. proto/enablerpc/enablerpc.proto
勝利は--proto_path = :. $ GOPATH / SRCを認識しないので、なお 、 私たちは以下の独自のスクリプトに対処する必要があり、ここでE:/winlion/gopath
それぞれのGOPATHを交換してください
>cd /d E:\winlion\gopath\src\techidea8.com\microapp\doc\enablerpc
>protoc --proto_path=. --proto_path=E:/winlion/gopath/src --go_out=. --micro_out=. proto/enablerpc/enablerpc.proto
- サービスを開始
#启动微服务
>go run main.go
#启动rpc支持
> micro api --handler=rpc --namespace=go.micro.srv --enable_rpc=true
- テスト
> curl -H "Content-Type: application/json" -d "{\"service\": \"go.micro.srv.enablerpc\",\"method\": \"Enablerpc.Call\", \"request\": {\"name\": \"Winlion\"}}" "http://localhost:8080/rpc"
#返回如下数据
{"msg":"Hello Winlion"}
この記事を読む前に、あなたは次のように読み取るために必要があるかもしれません
すぐに行く-マイクロ環境を構築するための1分:golang分散型マイクロサービスフレームワークに行く-マイクロ入門は1ノート
推奨読書
経験とソースコードを提供ランディングサイトのアドレスを得るために、マイクロチャネルの二次元コードをスイープ
楽屋管理フレームワークのrestgo管理者を行くgolang言語のオープンソースプロジェクト