搭建springcloud的demo之Hystrix服务降级 (八)

服务降级

整体资源快不够了,忍痛将某些服务先关掉,待渡过难关.再开启回来;

服务降级处理是在客户端实现完成的,与服务端没有关系

修改microservicecloud-api工程,根据已经有的DeptClientService接口新建一个实现了FallbackFactory接口的类DeptClientServiceFallbackFactory

搭建springcloud的demo之Hystrix服务降级 (八)

package com.yt.springcloud.service;

import java.util.List;

import org.springframework.stereotype.Component;

import com.yt.springcloud.entity.Dept;

import feign.hystrix.FallbackFactory;

@Component // 不要忘记添加,不要忘记添加
public class DeptClientServiceFallbackFactory implements FallbackFactory<DeptClientService>
{
	@Override
	public DeptClientService create(Throwable throwable)
	{
		return new DeptClientService() {
			@Override
			public Dept get(long id)
			{
				return new Dept().setDeptno(id).setDname("该ID:" + id + "没有没有对应的信息,Consumer客户端提供的降级信息,此刻服务Provider已经关闭")
						.setDb_source("no this database in MySQL");
			}

			@Override
			public List<Dept> list()
			{
				return null;
			}

			@Override
			public boolean add(Dept dept)
			{
				return false;
			}
		};
	}
}

修改microservicecloud-api工程,DeptClientService接口在注解@FeignClient

搭建springcloud的demo之Hystrix服务降级 (八)

package com.yt.springcloud.service;

import java.util.List;

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.yt.springcloud.entity.Dept;

/**
 * 
 * @Description: 修改microservicecloud-api工程,根据已经有的DeptClientService接口
 * 一个实现了FallbackFactory接口的类DeptClientServiceFallbackFactory
 * @author zzyy
 * @date 2018年4月21日
 */
//@FeignClient(value = "MICROSERVICECLOUD-DEPT")//针对于更细粒化的控制,针对哪一个微服务进行面向接口的feign的
@FeignClient(value = "MICROSERVICECLOUD-DEPT",fallbackFactory=DeptClientServiceFallbackFactory.class)
//把当前接口的所有方法,都交给fallback去处理,是这个类DeptClientServiceFallbackFactory.class实现了fallbackfactory
public interface DeptClientService
{
	@RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)
	public Dept get(@PathVariable("id") long id);

	
	@RequestMapping(value = "/dept/list", method = RequestMethod.GET)
	public List<Dept> list();

	@RequestMapping(value = "/dept/add", method = RequestMethod.POST)
	public boolean add(Dept dept);
}


microservicecloud-api工程 重新打包maven-clean–>maven install

microservicecloud-consumer-dept-feign工程修改yml

搭建springcloud的demo之Hystrix服务降级 (八)

server :
   port: 80
   
   
feign: 
  hystrix: 
      enabled: true #开启hystrix
      
   
   
eureka:
   client:
     register-with-eureka: false #自己不能注册
     service-url:
       defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
       #eureka集群

测试

  1. 3个rureka启动
  2. 微服务microservicecloud-provider-dept-8001启动
  3. microservicecloud-consumer-dept-feign启动
  4. 正常访问测试:http://localhost/consumer/dept/get/1
    搭建springcloud的demo之Hystrix服务降级 (八)
  5. 故意关闭微服务microservicecloud-provider-dept-8001
  6. 客户端自己调用提示
    搭建springcloud的demo之Hystrix服务降级 (八)
    此时服务端provider已经down了,但是我们做了服务降级处理,让客户端不可用时也会获得提示信息而不会挂起耗死服务器;

总结

搭建springcloud的demo之Hystrix服务降级 (八)