5.【go-kit教程】go-kit中间件

go-kit中间件

  • go-kit提供了很多用于构建微服务的组件,包括中间件。中间件是在HTTP请求和响应之间处理请求的一些逻辑,可以用于实现一些通用的功能,例如认证、日志记录、缓存等。

  • 官方中间件定义

    type Middleware func(Endpoint) Endpoint
    
  • 在go-kit中间件可以通过装饰器模式来实现,即在原来的服务之上再加上一层逻辑。Go-Kit中间件通常有三种类型:

    1. 服务(service)中间件:服务中间件是针对服务层面的中间件,可以拦截请求,修改上下文信息,添加一些必要的头信息,以及添加跨域资源共享(CORS)等。

    2. 传输(transport )中间件:传输中间件是针对传输层面的中间件,例如负载均衡器和熔断器等。

    3. enpoint中间件:endpoint 中间件的一种常见方式是使用装饰器模式。可以定义一个函数,该函数接受一个 endpoint 作为参数,返回一个新的 endpoint,该新 endpoint 可以在原始 endpoint 被调用前或后添加一些逻辑。例如:

      func MiddlewareOne(next endpoint.Endpoint) endpoint.Endpoint {
             
          return func(ctx context.Context, request interface{
             }) (interface{
             }, error) {
             
              // 在原始 endpoint 被调用前添加逻辑
              // ...
              // 调用原始 endpoint
              response, err := next(ctx, request)
              // 在原始 endpoint 被调用后添加逻辑
              // ...
              return response, err
          }
      }
      
  • go-kit提供了一些默认的中间件,例如Logging中间件,它可以记录每个请求的日志信息,包括请求的URL、方法、请求体、响应码和响应体等。还有一些其他的中间件,例如Circuit Breaker中间件、Rate Limiter中间件等。

日志中间件

1. transport 日志中间件

  • 中间件定义

    func LoggingMiddleware(logger log.Logger) endpoint.Middleware {
         
        return func(next endpoint.Endpoint) endpoint.Endpoint {
         
            return func(ctx context.Context, request interface{
         }) (interface{
         }, error) {
         
                logger.Log("msg", "starting request")
    
                // 计算请求处理时间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值