engin 定义如下:
type engine struct {
conf RestConf
routes []featuredRoutes
unauthorizedCallback handler.UnauthorizedCallback
unsignedCallback handler.UnsignedCallback
middlewares []Middleware
shedder load.Shedder
priorityShedder load.Shedder
}
engine是一个服务的实例,通过配置engine的设置来给服务添加路由,鉴权,签名,中间件,降载等。
通过 goctl api new server
我们可以快速创建一个怎么使用engine实例如下:
package main
import (
"flag"
"fmt"
"server/internal/config"
"server/internal/handler"
"server/internal/svc"
"github.com/tal-tech/go-zero/core/conf"
"github.com/tal-tech/go-zero/rest"
)
var configFile = flag.String("f", "etc/server-api.yaml", "the config file")
func main() {
flag.Parse()
var c config.Config
conf.MustLoad(*configFile, &c)
ctx := svc.NewServiceContext(c)
server := rest.MustNewServer(c.RestConf)
defer server.Stop()
handler.RegisterHandlers(server, ctx)
fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port)
server.Start()
}
我们可以通过如下方式看看engin都有哪些可以配置项。
执行完上面的命令后,可以在config目录下看到如下生成的config.yaml文件:
CpuThreshold: 0
Host: ""
Log:
Compress: false
KeepDays: 0
Level: ""
Mode: ""
Path: ""
ServiceName: ""
StackCooldownMillis: 0
MaxBytes: 0
MaxConns: 0
MetricsUrl: ""
Mode: ""
Name: ""
Port: 0
Prometheus:
Host: ""
Path: ""
Port: 0
Signature:
Expiry: 0
PrivateKeys: null
Strict: false
Timeout: 0
Verbose: false
下面我们依次解释下各个属性的作用:
参数 | 作用 | 默认值 | 说明 |
---|---|---|---|
CpuThreshold | 这个属性是用来做降载 | 900 | 可以配置的区间是[0:1000] |
Host | 服务监听ip地址 | 0.0.0.0 | - |
Port | 服务监听端口 | ||
Log | 配置日志收集 | - | - |
Log.Compress | 日志是不是需要压缩 | 如果true,日志会用gzip方式压缩 | |
Log.KeepDays | 日志保留天数 | ||
Log.Level | 记录收集日志级别 | 可选项为info,options=info | |
Log.Mode | 日志输出方式 | 可选项为console | |
Log.Path | 日志落盘目录 | ||
Log.ServiceName | 配合Mode使用 | ||
Log.StackCooldownMillis | 多长时间写一次 | 100ms | |
MaxBytes | http ContentLength 最大允许大小 | 1Mb | |
MaxConns | 并发连接数 | 10000 | |
MetricsUrl | 配合Prometheus做服务监控使用,一些服务监控信息会通过post发送到这个指定的url上,详细可查看 remotewriter.go 文件 |
||
Prometheus | prometheus服务监控配置 | ||
Mode | 服务运行模式,可选项为 | 可选项为dev | |
Name | 服务名称 | ||
Timeout | 请求超时时间设置 | 3s | |
Verbose | 请求体/响应体是否打印 | 打开时框架会打印很详细的request和response日志信息,测试阶段方便查问题。 | |
Signature | 配置签名,这个比较复杂,后续会另外起一篇文章详细解释签名,签名目的是为了防止传输内容被抓包暴露协议内容。 |