HTTP服务

1 Example

项目地址HTTP服务 - 图1 (opens new window)

2 HTTP配置

  1. type Config struct {
  2. Host string // IP地址,默认127.0.0.1
  3. Port int // PORT端口,默认9001
  4. Mode string // gin的模式,默认是release模式
  5. EnableMetricInterceptor bool // 是否开启监控,默认开启
  6. EnableTraceInterceptor bool // 是否开启链路追踪,默认开启
  7. EnableLocalMainIP bool // 自动获取ip地址
  8. SlowLogThreshold time.Duration // 服务慢日志,默认500ms
  9. }

3 用户配置

  1. [server.http]
  2. host = "127.0.0.1"
  3. port = 9001

3.1 用户代码

配置创建一个 http 的配置项,其中内容按照上文配置进行填写。以上这个示例里这个配置key是server.http

代码中创建一个 HTTP 服务, egin.Load(“”).Build() ,代码中的 key 和配置中的 key 要保持一致。创建完 HTTP 服务后, 将他添加到 ego new 出来应用的 Serve 方法中,之后使用的方法和 gin 就完全一致。

  1. package main
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/gotomicro/ego"
  5. "github.com/gotomicro/ego/core/elog"
  6. "github.com/gotomicro/ego/server/egin"
  7. )
  8. // export EGO_DEBUG=true && go run main.go --config=config.toml
  9. func main() {
  10. if err := ego.New().Serve(func() *egin.Component {
  11. server := egin.Load("server.http").Build()
  12. server.GET("/hello", func(ctx *gin.Context) {
  13. ctx.JSON(200, "Hello EGO")
  14. return
  15. })
  16. return server
  17. }()).Run(); err != nil {
  18. elog.Panic("startup", elog.FieldErr(err))
  19. }
  20. }

4 开启链路的服务

4.1 用户配置

  1. [server.http]
  2. port = 9007
  3. [trace.jaeger]
  4. ServiceName = "server"

4.2 用户代码

  1. // export EGO_DEBUG=true && go run main.go --config=config.toml
  2. func main() {
  3. if err := ego.New().Serve(func() *egin.Component {
  4. server := egin.Load("server.http").Build()
  5. server.GET("/hello", func(ctx *gin.Context) {
  6. // Get traceId from Request's context
  7. span, _ := etrace.StartSpanFromContext(ctx.Request.Context(), "Handle: /Hello")
  8. defer span.Finish()
  9. ctx.JSON(200, "Hello client: "+ctx.GetHeader("app"))
  10. })
  11. return server
  12. }()).Run(); err != nil {
  13. elog.Panic("startup", elog.FieldErr(err))
  14. }
  15. }

4.2 jaegerUI中查看

trace-in-JaegerUI