1. 网络服务
前言: Go Web 为 micro web 应用提供了一个接口
2. 概述
Go Web 提供了一个很小的 HTTP Web 服务器库, 利用 go-micro 作为微服务世界中的一等公民创建 micro web 服务. 它包装了 go-micro,为您提供服务发现, 检测信号以及将 web 应用创建为微服务的能力.
2.1. 特性
- 服务发现 - 服务在启动时自动注册在服务发现中. Go Web 包括一个具有预初始化往返器的 http.Client, 它利用服务发现, 以便您可以使用服务名称.
- 健康检测 - Go Web 应用将定期使用服务发现进行检测信号, 以提供实时更新. 如果服务失败, 将在预定义的过期时间后将其从注册表中删除.
- 自定义处理程序 - 指定您自己的 http 路由器以处理请求. 这允许您完全控制要路由到内部处理程序的方式.
- 静态服务 - Go Web 自动检测本地静态
html
目录, 如果未指定路由处理程序, 则提供文件. 对于那些希望将 JS Web 应用程序编写为微服务的用户的快速解决方案.
2.2. 开始
2.3. 依赖
Go Web 使用 Go Micro, 这意味着它需要服务发现
有关安装说明, 可参阅 go-micro
2.4. 使用
service := web.NewService(
web.Name("example.com"),
)
service.HandleFunc("/foo", fooHandler)
if err := service.Init(); err != nil {
log.Fatal(err)
}
if err := service.Run(); err != nil {
log.Fatal(err)
}
2.5. 设置处理程序
您可能具有对 HTTP 处理程序的首选项, 因此请使用其他操作. 这失去了在发现中注册终结点的能力, 但我们会很快修复它.
import "github.com/gorilla/mux"
r := mux.NewRouter()
r.HandleFunc("/", indexHandler)
r.HandleFunc("/objects/{object}", objectHandler)
service := web.NewService(
web.Handler(r)
)
2.6. 调用服务
Go-web 包括一个具有自定义 http.RoundTripper 并使用服务发现 http.Client
c := service.Client()
rsp, err := c.Get("http://example.com/foo")
这将查找 example.com
服务发现以及路由到其中一个可用节点。
2.7. 静态文件
Go Web 总是意味着注册 Web 应用, 其中大多数代码将用 JS 编写。 默认情况下, 如果 "/" 上没有注册任何处理程序, 并且我们发现本地的 "html" 目录, 则将提供静态文件.
您将看到这样的日志输出.
2019/05/12 14:55:47 Enabling static file serving from /tmp/foo/html
如果要手动设置此路径, 请使用 StaticDir 选项. 如果指定了相对路径, 我们将使用 os.Getwd()和前缀.
service := web.NewService(
web.Name("example.com"),
web.StaticDir("/tmp/example.com/html"),
)