golang微服務框架go-micro使用 (三) Call a service

通過命令行工具調用服務

luslin@local:~/software/zipkin$ MICRO_REGISTRY=etcd micro list services
com.foo.service.micro
go.micro.web
micro.http.broker

com.foo.service.micro 是我們的目標服務,micro.http.broker 是默認的中間件服務。

在調用前,使用get命令查看服務的詳情,端點定義,元數據和節點信息等

luslin@local:~/software/zipkin$ MICRO_REGISTRY=etcd micro get service com.foo.service.micro
service  com.foo.service.micro

version latest

ID	Address	Metadata
com.foo.service.micro-06796a43-b7ee-47e9-ae4e-2fbd208de511	192.168.1.88:34441	protocol=grpc,registry=etcd,server=grpc,transport=grpc,broker=http
com.foo.service.micro-fafcc3b2-e1b0-475e-b1b7-45799abb8775	192.168.1.88:43877	broker=http,protocol=grpc,registry=etcd,server=grpc,transport=grpc

Endpoint: Micro.Call

Request: {
	name string
}

Response: {
	msg string
}


Endpoint: Micro.PingPong

Metadata: stream=true

Request: {}

Response: {}


Endpoint: Micro.Stream

Metadata: stream=true

Request: {}

Response: {}


Endpoint: Micro.Handle

Metadata: subscriber=true,topic=go.micro.service.micro

Request: {
	say string
}

Response: {}

通過命令行調用服務

luslin@local:~/software/zipkin$ MICRO_REGISTRY=etcd micro call com.foo.service.micro Micro.Call '{"name":"bill"}'
{
	"msg": "Hello bill"
}

通過互動模式調用服務

luslin@local:~/software/zipkin$ MICRO_REGISTRY=etcd micro cli
micro> help
Commands:
	 call 			 Call a service
	 deregister 		 Deregister a service
	 exit 			 Exit the CLI
	 get 			 Get service info
	 health 		 Get service health
	 help 			 CLI usage
	 list 			 List services, peers or routes
	 publish 		 Publish a message to a topic
	 quit 			 Exit the CLI
	 register 		 Register a service
	 stats 			 Get service stats
	 stream 		 Stream a call to a service

互動模式的命令不同,因爲非互動模式下支持了更多的功能

micro> list 
com.foo.service.micro
go.micro.web
micro.http.broker
micro> get com.foo.service.micro
service  com.foo.service.micro

version latest

ID	Address	Metadata
com.foo.service.micro-06796a43-b7ee-47e9-ae4e-2fbd208de511	192.168.1.88:34441	broker=http,protocol=grpc,registry=etcd,server=grpc,transport=grpc
com.foo.service.micro-fafcc3b2-e1b0-475e-b1b7-45799abb8775	192.168.1.88:43877	broker=http,protocol=grpc,registry=etcd,server=grpc,transport=grpc

Endpoint: Micro.Call

Request: {
	name string
}

Response: {
	msg string
}


Endpoint: Micro.PingPong

Metadata: stream=true

Request: {}

Response: {}


Endpoint: Micro.Stream

Metadata: stream=true

Request: {}

Response: {}


Endpoint: Micro.Handle

Metadata: topic=go.micro.service.micro,subscriber=true

Request: {
	say string
}

Response: {}

micro> call com.foo.service.micro Micro.Call {"name":"lin"} // 這裏不需要使用json字符串
{
	"msg": "Hello lin"
}

通過web鏈接調用服務

在啓動web後,可以進入http://127.0.0.1:8082/client
在這裏插入圖片描述

通過代碼調用服務

創建一個項目,佈局如下:

luslin@local:~/go/workspace/tools/micro-hello-cli$ tree
.
├── go.mod
├── go.sum
├── main.go
├── micro_hello_cli
├── plugin.go
└── proto
    └── hello
        ├── micro.pb.go
        ├── micro.pb.micro.go
        └── micro.proto

main.go

package main

import (
	"context"
	"fmt"
	"github.com/micro/go-micro/v2"
	hello "micro-hello-cli/proto/hello"
)

func main() {
	// New Service
	service := micro.NewService( 		// 創建服務
		micro.Name("com.foo.service.micro.clinet"),
		micro.Version("latest"),
	)
	service.Init() // 服務初始化
	resp,err := hello.NewMicroService("com.foo.service.micro",service.Client()).Call(context.TODO(),&hello.Request{Name: "lin"})  // 創建client並調用call方法
	if err != nil {
		panic(err)
	}

	fmt.Println(resp.Msg)
}
結果
Hello lin
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章