网络服务

未匹配的标注
本文档最新版为 3.x,旧版本可能放弃维护,推荐阅读最新版!

Go Web

前言: Go Web 为 micro web 应用提供了一个接口

概述

Go Web 提供了一个很小的 HTTP Web 服务器库, 利用 go-micro 作为微服务世界中的一等公民创建 micro web 服务. 它包装了 go-micro,为您提供服务发现, 检测信号以及将 web 应用创建为微服务的能力.

特性

  • 服务发现 - 服务在启动时自动注册在服务发现中. Go Web 包括一个具有预初始化往返器的 http.Client, 它利用服务发现, 以便您可以使用服务名称.
  • 健康检测 - Go Web 应用将定期使用服务发现进行检测信号, 以提供实时更新. 如果服务失败, 将在预定义的过期时间后将其从注册表中删除.
  • 自定义处理程序 - 指定您自己的 http 路由器以处理请求. 这允许您完全控制要路由到内部处理程序的方式.
  • 静态服务 - Go Web 自动检测本地静态 html 目录, 如果未指定路由处理程序, 则提供文件. 对于那些希望将 JS Web 应用程序编写为微服务的用户的快速解决方案.

开始

依赖

Go Web 使用 Go Micro, 这意味着它需要服务发现

有关安装说明, 可参阅 go-micro

使用

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)
}

设置处理程序

您可能具有对 HTTP 处理程序的首选项, 因此请使用其他操作. 这失去了在发现中注册终结点的能力, 但我们会很快修复它.

import "github.com/gorilla/mux"

r := mux.NewRouter()
r.HandleFunc("/", indexHandler)
r.HandleFunc("/objects/{object}", objectHandler)

service := web.NewService(
    web.Handler(r)
)

调用服务

Go-web 包括一个具有自定义 http.RoundTripper 并使用服务发现 http.Client

c := service.Client()

rsp, err := c.Get("http://example.com/foo")

这将查找 example.com 服务发现以及路由到其中一个可用节点。

静态文件

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"),
)

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
taadis
讨论数量: 0
发起讨论 只看当前版本


暂无话题~