[go-micro实战]14 Hystrix捕获超时

修改ProdService.go(实际业务),延迟生成数据

func (s *ProdService) GetProdList(c context.Context, in *Services.ProdRequest, res *Services.ProdListResponse) error {
	time.Sleep(time.Second * 3) 	// hystrix使用 模拟延迟
	models := make([]*Services.ProdModel, 0)
	var i int32
	for i = 0; i < in.Size; i++ {
		models = append(models, newProd(i+100, "ProdName"+strconv.Itoa(int(i)+100)))
	}
	res.Data = models
	return nil
}

修改ProdService.go(调用业务的)

package Server

import (
	"context"
	"gitee.com/Hind3ight/easy-go-micro/go-micro/Services"
	"github.com/afex/hystrix-go/hystrix"
	"github.com/gin-gonic/gin"
)

func GetProdListServer(c *gin.Context) {
	prodService := c.Keys["prodService"].(Services.ProdService)
	var prodReq Services.ProdRequest
	err := c.Bind(&prodReq)
	if err != nil {
		c.JSON(500, gin.H{"status": err.Error()})
	} else {
		// 临时改造 熔断
		// 1. 配置 config
		configA := hystrix.CommandConfig{
			Timeout:2000,
		}
		// 2. 配置command
		hystrix.ConfigureCommand("getProds",configA)
		// 3. 执行Do方法
		var prodRes *Services.ProdListResponse
		err := hystrix.Do("getProds", func() error {
			prodRes, err = prodService.GetProdList(context.Background(), &prodReq)
			return err
		}, nil)
		if err != nil {
			c.JSON(500, gin.H{"status": err.Error()})
		} else {
			c.JSON(200, gin.H{"data": prodRes.Data})
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值