【SpringCloud】(十二):Fegion的Hystrix支援

00潤物無聲00發表於2017-08-14

  Fegion也支援Hystrix。當服務提供者出現異常的時候,使用Hystrix回撥方法。




  在前面文章中提到的microservice-comsumer-movie-feign的基礎上進行修改,主要是有一個回撥的方法。


啟動類:

package com.dynamic.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class ComsumerMovieFeignApplication {
	
	public static void main(String[] args) {
		SpringApplication.run(ComsumerMovieFeignApplication.class, args);
	}
}


Controller

package com.dynamic.cloud.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import com.dynamic.cloud.entity.User;
import com.dynamic.cloud.feign.UserFeignClient;

@RestController
public class MovieController {

	@Autowired
	private UserFeignClient userFeignClient;
	
	@GetMapping("/movie/{id}")
	public User findById(@PathVariable Long id)
	{
		return this.userFeignClient.findById(id);
	}
}


UserFeignClient 
package com.dynamic.cloud.feign;

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.dynamic.cloud.entity.User;

@FeignClient(name="microservice-provider-user",fallback =HystrixClientFallback.class)
public interface UserFeignClient {
	
	@RequestMapping(value="/simple/{id}",method = RequestMethod.GET) //只能是RequestMapping
	public User findById(@PathVariable("id") Long id); //@PathVariable需要設定括號中的名稱

}

@FeignClient,要用name 和 fallback 

HystrixClientFallback要實現UserFeignClient,並且加入到容器中。

package com.dynamic.cloud.feign;

import org.springframework.stereotype.Component;
import com.dynamic.cloud.entity.User;

@Component
public class HystrixClientFallback implements UserFeignClient {

	@Override
	public User findById(Long id) {
		
		User user = new User();
		user.setId(0L);
		return user;
	}

}

  啟動Eureka,使用者微服務和修改後的電影微服務。正常情況下,電影微服務呼叫使用者微服務顯示資料,當使用者微服務出現異常時。電影微服務執行回撥方法。


 


相關文章