# rest engine参数详解 engin 定义如下: ```go 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实例如下: ```go 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都有哪些可以配置项。 - cd server/internal/config - goctl config -path ./config.go 执行完上面的命令后,可以在config目录下看到如下生成的config.yaml文件: ```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 | | | 配置签名,这个比较复杂,后续会另外起一篇文章详细解释签名,签名目的是为了防止传输内容被抓包暴露协议内容。 |