用list命令可以查看微服务。
$ micro list services
com.foo.srv.hello
go.micro.http.broker
名为com.foo.srv.hello的服务是我们的目标服务,go.micro.http.broker是消息代理服务的默认实现。
我们可以使用命令get查看此服务的详细信息,其中包括服务版本,端点定义,元数据和节点信息等。
$ micro get service com.foo.srv.hello
service com.foo.srv.hello
version latest
ID Address Metadata
com.foo.srv.hello-7c5ef5ef-22d5-4a10-a5c9-1408d16562f9 10.0.1.6:56004 broker=http,protocol=mucp,registry=mdns,server=mucp,transport=http
Endpoint: Hello.Call
Request: {
name string
}
Response: {
msg string
}
...
我们可以用call命令去调用这些接口。
$ micro call com.foo.srv.hello Hello.Call '{"name": "Bill"}'
{
"msg": "Hello Bill"
}
调用cli命令后,我们将进入交互模式:
$ micro cli
micro>
可以用list命令。
$ micro cli
micro> list
com.foo.srv.hello
go.micro.http.broker
micro>
micro> get com.foo.srv.hello
service com.foo.srv.hello
version latest
ID Address Metadata
com.foo.srv.hello-7c5ef5ef-22d5-4a10-a5c9-1408d16562f9
...
micro>
micro> call com.foo.srv.hello Hello.Call {"name": "Bill2"}
{
"msg": "Hello Bill2"
}
micro>
Micro还提供基于Web的客户端,该客户端支持用户在浏览器中调用服务。
运行之后micro web,您将在http://127.0.0.1:8082/client中找到以下界面。您可以通过单击“执行”按钮来调用选定的服务/端点,然后响应内容将以JSON格式显示在右侧。
上面提到的方法只是方便了运行时调试。通常,我们通过代码调用服务。
用以下布局创建一个客户项目:
.
├── main.go
├── plugin.go
├── proto/hello
│ └── hello.proto
│ └── hello.pb.go
│ └── hello.pb.micro.go
├── go.mod
├── go.sum
除了main.go之外,其他文件的内容与上一篇文章中描述的相同,在此不再赘述。
这是main.go中的代码:
package main
import (
"context"
"fmt"
"github.com/micro/go-micro/v2"
hello "hello/proto/hello"
)
func main() {
// New Service
service := micro.NewService(
micro.Name("com.foo.srv.hello.client"), //name the client service
)
// Initialise service
service.Init()
//create hello service client
helloClient := hello.NewHelloService("", service.Client())
//invoke hello service method
resp, err := helloClient.Call(context.TODO(), &hello.Request{Name: "Bill 4"})
if err != nil {
fmt.Println(err)
return
}
fmt.Println(resp.Msg)
}
在编写代码之后,您可以编译并运行:
$ go run main.go plugin.go
Hello Bill 4
$
将显示预期的响应。 如果该服务当前未运行,将报告错误:
$ go run main.go plugin.go
{"id":"go.micro.client","code":500,"detail":"service com.foo.srv.hello: not found","status":"Internal Server Error"}
$
带着使命来到世上的你,给他人提供价值,才有价值