Spring Cloud Feign远程调用之Hytrix实现熔断

我们使用SpringCloud的时候,特别是初级使用者,通常在调用远程服务失败时,会直接将次错误抛给浏览器。这样显然是不太合适的,或者他本就不影响其他的操作。这时候就可以使用Hystrix熔断机制。有异常情况时,让服务调用者,知道发生了异常,自己根据回调函数的反馈自行处理,是否会滚,是否告知上一级调用者(浏览器,或其他的服务)等等。 以下通过几个普通的小步骤,来描述一下,希望可以帮助需要同学

1,消费者类,远程服务的调用者

@RestController
@RequestMapping("/consumer")
public class ConsumerController {
	
	@Autowired
	private MyFeignClient myFeignClient;
	@RequestMapping("/getName")
	public String getName() {
		String name ="";
		name=myFeignClient.getName();
		return  name;
	}
}

2,在当前的服务器中传一个Feign客户端

@FeignClient(name="user-service-api",fallback=HystrixClinet.class)
public interface MyFeignClient {
	@RequestMapping(value="/producer/getName",method=RequestMethod.GET)
	public String getName();
}

注意,前提是需要在启动类中加入@EnableHystrix@EnableFeignClients ,"user-service-api"是我自己注册中的的远程服务的名字,自己的是什么就写什么,不区分大小写。

 3,建立fallBack回调对应的类

@Component
public class HystrixClinet implements MyFeignClient {

	@Override
	public String getName() {
		String name ="访问失败,进入回调";
		System.out.println(name);
		return name;
	}

}

注意服务间的调用,将来回调是同Spring的容器管理的,所以注解@Component是必不可少的(也可是其他的注解,要标记为Spring的组件即可,个人感觉这个最合适),这样你就可以在这个回调函数里自己处理然后返回给服务的调用者(消费者),一般是返回你们自己公司和项目的错误码等,我这只是简单的打印一下,方便调试看。

 

4 ,建立生产者,即服务的提供者

@RestController
@RequestMapping("/producer")
public class Producer {
	
	@RequestMapping(value="/getName",method=RequestMethod.GET)
	public String getName() {
		String name = "访问成功,请叫我66";
		System.out.println(name);
		try {
			Thread.sleep(3000L);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return name;
	}
}

这样,你可以随意的测试超时啦,当然也可以测一下空指针等运行时异常了。一个简单的feign调用模型开起了。同时需要注意在配置文件中打开对Hystrix的支持

feign:
  hystrix:
    enabled: true

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值