20.超时情况下的服务降级写法

在hystrix的超时回调函数中处理超时推荐其他商品

package main

import (
    "errors"
    "fmt"
    "github.com/afex/hystrix-go/hystrix"
    "math/rand"
    "time"
)

type Product struct {
    ID    int
    Title string
    Price int
}

func getProduct() (Product, error) {
    r := rand.Intn(10)
    if r < 6 { //模拟api卡顿和超时效果
        time.Sleep(time.Second * 4)
    }
    return Product{
        ID:    101,
        Title: "Golang从入门到精通",
        Price: 12,
    }, nil
}

func RecProduct() (Product, error) {
    return Product{
        ID:    999,
        Title: "推荐商品",
        Price: 120,
    }, nil

}

func main() {
    rand.Seed(time.Now().UnixNano())
    configA := hystrix.CommandConfig{ //创建一个hystrix的config
        Timeout: 3000, //command运行超过3秒就会报超时错误
    }
    hystrix.ConfigureCommand("get_prod", configA) //hystrix绑定command
    for {
        err := hystrix.Do("get_prod", func() error { //使用hystrix来讲我们的操作封装成command
            p, _ := getProduct() //这里会随机延迟0-4秒
            fmt.Println(p)
            return nil
        }, func(e error) error {
            fmt.Println(RecProduct()) //超时后调用回调函数返回推荐商品
            return errors.New("my timeout")
        })
        if err != nil {
            //如果降级也失败了,在这里定义业务逻辑
        }
    }
}

来自为知笔记(Wiz)

原文地址:https://www.cnblogs.com/hualou/p/12084189.html

时间: 2024-08-03 02:27:19

20.超时情况下的服务降级写法的相关文章

linux-Centos 7下tftp-server服务的安装与配置

TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间 进行简单文件传输的协议,提供不复杂.开销不大的文件传输服务.端口号为UDP的69号端口. TFTP是一个传输文件的简单协议,它基于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的 此协议设计的时候是进行小文件传输的.因此它不具备通常的FTP的许多功能, 它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证.它传输8位数

一次http请求,谁会先断开TCP连接?什么情况下客户端先断,什么情况下服务端先断?

我们有2台内部http服务(nginx): 201:这台服务器部署的服务是account.api.91160.com,这个服务是供前端页面调用: 202:这台服务器部署的服务是hdbs.api.91160.com,    这个服务是供前端页面调用: 近期发现,这2台服务器的网络连接中,TIME_WAIT 数量差别很大,201的TIME_WAIT大概20000+,202的TIME_WAIT大概1000 ,差距20倍:2台的请求量差不多,都是以上内部调用的连接,且服务模式也没有什么差异,为什么连接数

@Java web程序员,在保留现场,服务不重启的情况下,执行我们的调试代码(JSP 方式)

一.前言 类加载器实战系列的第六篇(悄悄跟你说,这篇比较水),前面5篇在这里: 实战分析Tomcat的类加载器结构(使用Eclipse MAT验证) 还是Tomcat,关于类加载器的趣味实验 了不得,我可能发现了Jar 包冲突的秘密 重写类加载器,实现简单的热替换 @Java Web 程序员,我们一起给程序开个后门吧:让你在保留现场,服务不重启的情况下,执行我们的调试代码 最近事不算多,所以有点时间写博客,昨天写着写着,测试的同学反馈说有一个bug.我看了下服务端日志,空指针了: 下面会给出详细

破解windows下MySQL服务启动不了的情况下不能对其进行完全卸载的解决方案

以下的文章主要介绍的是在MySQL服务启动不了的情况下,不能对其进行完全卸载的实际解决办法的描述,以下就是对解决MySQL服务启动不了的情况下具体方案的描述,希望在你今后的学习中会对你有所帮助. MySQL 5.1 安装过程中报apply security setting错误的解决办法 1, 卸载MySQL 2, 删除目录 C:\Documents and Settings\All Users\Application Data\MySQL 3, 重新安装MySQL 就 OK 啦 [MySQL]

WCF服务在高并发情况下报目标积极拒绝的异常处理 z

http://www.cnblogs.com/kklldog/p/5037006.html wcf的监控服务,偶尔监控到目标服务会报一个目标积极拒绝的错误.一开始以为服务停止了,上服务器检查目标服务好好的活着.于是开始查原因. 一般来说目标积极拒绝(TCP 10061)的异常主要是2种可能: 1:服务器关机或者服务关闭 2:Client调用的端口错误或者服务器防火墙没开相应的端口 但是我们的服务本身是可以调用的,只是偶尔报这个错误,说明并不是这2个问题造成的.继续google,在stackove

在jsp中选中checkbox后 将该记录的多个数据获取,然后传到Action类中进行后台处理 双主键情况下 *.hbm.xml中的写法

在jsp中选中checkbox后 将该记录的多个数据获取,然后传到Action类中进行后台处理 双主键情况下 *.hbm.xml中的写法 ==========方法1: --------1. 选相应的checkbox后  点删除按钮------------- <!-- *******************删除******************* -->     <input type="image" alt="delete"      src=&

(转)不停止Nginx服务的情况下平滑变更Nginx配置

在不停止Nginx服务的情况下平滑变更Nginx配置 1.修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确: /usr/local/webserver/nginx/sbin/nginx -t 如果屏幕显示以下两行信息,说明配置文件正确: the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok the confi

关于WCF服务在高并发情况下报目标积极拒绝的异常处理

最近弄了个wcf的监控服务,偶尔监控到目标服务会报一个目标积极拒绝的错误.一开始以为服务停止了,上服务器检查目标服务好好的活着.于是开始查原因. 一般来说目标积极拒绝(TCP 10061)的异常主要是2种可能: 1:服务器关机或者服务关闭 2:Client调用的端口错误或者服务器防火墙没开相应的端口 但是我们的服务本身是可以调用的,只是偶尔报这个错误,说明并不是这2个问题造成的.继续google,在stackoverflow上看到这样一篇:传送门 1 2 3 4 5 6 7 8 9 10 11

破解windows下MySQL服务启动不了的情况下不能对其进行全然卸载的解决方式

下面的文章主要介绍的是在MySQL服务启动不了的情况下,不能对其进行全然卸载的实际解决的方法的描写叙述,下面就是对解决MySQL服务启动不了的情况下详细方案的描写叙述,希望在你今后的学习中会对你有所帮助. MySQL 5.1 安装过程中报apply security setting错误的解决的方法 1, 卸载MySQL 2, 删除文件夹 C:\Documents and Settings\All Users\Application Data\MySQL 3, 又一次安装MySQL 就 OK 啦