Go - Micro微服务

Go - Micro微服务框架实践 - 工具包(四)

2018-12-18  本文已影响9人  承诺一时的华丽

Micro Toolkit

Micro是云原生开发的工具包。它可以帮助您构建面向未来的应用程序平台和服务。

概观

Micro解决了构建云原生系统的关键要求。它采用微服务架构模式并将其转换为一组工具,充当可扩展平台的构建块。Micro处理分布式系统的复杂性,并提供开发人员已经理解的简单抽象。

技术在不断发展。基础架构堆栈总是在变化。Micro是一个可插拔的工具包,可以解决这些问题。插入任何堆栈或底层技术。使用micro构建面向未来的系统。

特征

该工具包由以下功能组成:

入门

安装Micro

go get -u github.com/micro/micro

或者通过Docker

docker pull microhq/micro

依赖

微工具包有两个依赖项:

服务发现

服务发现用于名称解析,路由和集中元数据。
Micro使用go-micro注册表进行服务发现。Consul是默认注册表。

Consul

安装并运行Consul

# install
brew install consul

# run
consul agent -dev

mDNS

mDNS是用于零依赖性服务发现的内置注册表。

为任何命令传递--registry=mdns或设置env varMICRO_REGISTRY=mdns

# Use flag
micro --registry=mdns list services

# Use env var
MICRO_REGISTRY=mdns micro list services`

有关更多服务发现插件,请参阅go-plugins

Protobuf

Protobuf用于代码生成。它减少了需要编写的样板代码量。

# install protobuf
brew install protobuf

# install protoc-gen-go
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}

# install protoc-gen-micro
go get -u github.com/micro/protoc-gen-micro

有关详细信息,请参阅protoc-gen-micro

写一个服务

Micro包括新模板生成以加速编写应用程序
有关编写服务的完整详细信息,请参阅go-micro

生成模板

在这里,我们将使用快速生成示例模板 micro new
指定相对于$ GOPATH的路径

micro new github.com/micro/example

该命令将输出

example/
    Dockerfile  # A template docker file
    README.md   # A readme with command used
    handler/    # Example rpc handler
    main.go     # The main Go program
    proto/      # Protobuf directory
    subscriber/ # Example pubsub Subscriber

使用编译protobuf代码 protoc

protoc --proto_path=. --micro_out=. --go_out=. proto/example/example.proto

现在像任何其他go应用程序一样运行它

go run main.go

例子

现在我们有一个使用micro new模板生成的运行应用程序,让我们测试一下。

列出服务

每个服务都注册了发现,因此我们应该能够找到它。

micro list services

产量

consul
go.micro.srv.example
topic:topic.go.micro.srv.example

示例应用已使用完全限定的域名注册 go.micro.srv.example

获得服务

每个服务都使用唯一的ID,地址和元数据进行注册。

micro get service go.micro.srv.example

产量

service  go.micro.srv.example

version latest

ID  Address Port    Metadata
go.micro.srv.example-437d1277-303b-11e8-9be9-f40f242f6897   192.168.1.65    53545   transport=http,broker=http,server=rpc,registry=consul

Endpoint: Example.Call
Metadata: stream=false

Request: {
    name string
}

Response: {
    msg string
}

Endpoint: Example.PingPong
Metadata: stream=true

Request: {}

Response: {}

Endpoint: Example.Stream
Metadata: stream=true

Request: {}

Response: {}

Endpoint: Func
Metadata: subscriber=true,topic=topic.go.micro.srv.example

Request: {
    say string
}

Response: {}

Endpoint: Example.Handle
Metadata: subscriber=true,topic=topic.go.micro.srv.example

Request: {
    say string
}

Response: {}

致电服务

通过CLI进行RPC调用。查询以json的形式发送。

micro call go.micro.srv.example Example.Call '{"name": "John"}'

产量

{
    "msg": "Hello John"
}

查看cli doc以获取更多信息。

现在让我们通过HTTP测试服务。

运行API

micro api是一个http网关,可动态路由到后端服务

让我们运行它,以便我们可以查询示例服务。

MICRO_API_HANDLER=rpc \
MICRO_API_NAMESPACE=go.micro.srv \ 
micro api

一些信息:

调用API

使用json向api发出POST请求

curl -XPOST -H 'Content-Type: application/json' -d '{"name": "John"}' http://localhost:8080/example/call

产量

{"msg":"Hello John"}

有关详细信息,请参阅api doc

插件

Micro是基于go-micro构建的,使其成为可插拔的工具包。

Go-micro为可以换出的分布式系统基础设施提供抽象。

可插拔功能

可插拔的微观功能:

go-plugins上找到插件

使用插件

只需将它们链接到一个单独的文件中即可集成go-micro插件

创建一个plugins.go文件

import (
    // etcd v3 registry
    _ "github.com/micro/go-plugins/registry/etcdv3"
    // nats transport
    _ "github.com/micro/go-plugins/transport/nats"
    // kafka broker
    _ "github.com/micro/go-plugins/broker/kafka"
)

建立二进制

使用Go工具链重建micro二进制文件

# For local use
go build -i -o micro ./main.go ./plugins.go

# For docker image
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-w' -i -o micro ./main.go ./plugins.go

启用插件

使用命令行标志或env变量启用插件

# flags
micro --registry=etcdv3 --transport=nats --broker=kafka [command]

# env vars
MICRO_REGISTRY=etcdv3 MICRO_TRANSPORT=nats MICRO_BROKER=kafka micro [command]
上一篇 下一篇

猜你喜欢

热点阅读