Go - Micro微服务

Go - Micro微服务框架实践 - API(五)

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

micro api是api网关

使用API​​网关模式为您的服务提供单个公共入口点。micro api服务于HTTP并使用服务发现动态路由。

image

概观

micro api是HTTP api。对API的请求通过HTTP提供,并通过服务发现进行路由。它建立在go-micro之上 ,利用它进行服务发现,负载平衡,编码和基于RPC的通信。

因为micro api在内部使用go-micro,所以这也使它可以插拔。请参阅go-plugins以获得对gRPC,kubernetes,etcd,nats,rabbitmq等的支持。此外,它还使用了go-api,它也允许配置处理程序。

安装

go get -u github.com/micro/micro

# Default port 8080
micro api

使用ACME

默认使用ACME通过Let's Encrypt进行安全服务

MICRO_ENABLE_ACME=true micro api

(可选)指定主机白名单

MICRO_ENABLE_ACME=true \
MICRO_ACME_HOSTS=example.com,api.example.com \
micro api

设置TLS证书

API支持使用TLS证书安全地提供服务

MICRO_ENABLE_TLS=true \
MICRO_TLS_CERT_FILE=/path/to/cert \
MICRO_TLS_KEY_FILE=/path/to/key \
micro api

设置命名空间

API利用命名空间在逻辑上分离后端和面向公众的服务。命名空间和http路径用于解析服务名称/方法,例如GET /foo HTTP/1.1路由到服务名称go.micro.api.foo

默认命名空间是,go.micro.api并且可以像这样更改

MICRO_NAMESPACE=com.example.api micro api

例子

这里我们有一个3层架构的例子

完整的例子是examples / greeter

运行示例

先决条件:我们默认使用consul进行服务发现,以确保其安装和运行,例如consul agent -dev

# Download example
git clone https://github.com/micro/examples

# Start the service
go run examples/greeter/srv/main.go

# Start the API
go run examples/greeter/api/api.go

# Start the micro api
micro api

询问

通过micro api进行HTTP调用

curl "http://localhost:8080/greeter/say/hello?name=John"

HTTP路径/ greeter / say / hello映射到服务go.micro.api.greeter方法Say.Hello

绕过api服务并通过/ rpc直接调用后端

curl -d 'service=go.micro.srv.greeter' \
     -d 'method=Say.Hello' \
     -d 'request={"name": "John"}' \
     http://localhost:8080/rpc

与JSON完全相同的调用

curl -H 'Content-Type: application/json' \
     -d '{"service": "go.micro.srv.greeter", "method": "Say.Hello", "request": {"name": "John"}}' \
     http://localhost:8080/rpc

API

micro api提供以下HTTP API

- /[service]/[method]   # HTTP paths are dynamically mapped to services
- /rpc          # Explicitly call a backend service by name and method

请参阅下面的示例

处理程序

处理程序是管理请求路由的HTTP处理程序。

默认处理程序使用注册表中的端点元数据来确定服务路由。如果未找到路由匹配,则它将回退到“rpc”处理程序。您可以使用go-api配置注册路由。

API具有以下可配置的请求处理程序。

(可选)绕过/rpc端点处理程序

API处理程序

API处理程序为任何HTTP请求提供服务,并作为具有特定格式的RPC请求转发。

RPC处理程序

RPC处理程序提供json或protobuf HTTP POST请求并作为RPC请求转发。

代理处理程序

代理处理程序是具有内置服务发现的http保留代理。

事件处理程序

事件处理程序为HTTP提供服务,并使用go-micro代理通过消息总线将请求作为消息转发。

Web处理程序

Web处理程序是一个http保留代理,具有内置服务发现和Web套接字支持。

RPC端点

/ rpc端点让你绕过主处理程序直接与任何服务对话

示例调用:

curl -d 'service=go.micro.srv.greeter' \
     -d 'method=Say.Hello' \
     -d 'request={"name": "Bob"}' \
     http://localhost:8080/rpc

github.com/micro/examples/api中查找工作示例

分解器

Micro使用命名空间值和HTTP路径动态路由到服务。

默认命名空间是go.micro.api。通过--namespace或设置名称空间MICRO_NAMESPACE=

使用的旋转变压器如下所述。

RPC解析器

RPC服务有一个名称(go.micro.api.greeter)和一个方法(Greeter.Hello)。
URL解析如下:

Path Service Method
/foo/bar go.micro.api.foo Foo.Bar
/foo/bar/baz go.micro.api.foo Bar.Baz
/foo/bar/baz/cat go.micro.api.foo.bar Baz.Cat

版本化的API URL可以轻松映射到服务名称:

Path Service Method
/foo/bar go.micro.api.foo Foo.Bar
/v1/foo/bar go.micro.api.v1.foo Foo.Bar
/v1/foo/bar/baz go.micro.api.v1.foo Bar.Baz
/v2/foo/bar go.micro.api.v2.foo Foo.Bar
/v2/foo/bar/baz go.micro.api.v2.foo Bar.Baz

代理解析器

使用代理处理程序,我们只需要处理解析服务名称。所以分辨率与RPC解析器略有不同。
URLS解析如下:

Path Service Service Path
/foo go.micro.api.foo /foo
/foo/bar go.micro.api.foo /foo/bar
/greeter go.micro.api.greeter /greeter
/greeter/:name go.micro.api.greeter /greeter/:name
上一篇下一篇

猜你喜欢

热点阅读