一、Ribbon中使用熔断器
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency>
[url=][/url]
@EnableDiscoveryClient@SpringBootApplication@EnableHystrixpublic class ConsumerDeptRibbonApplication { publicstatic void main(String[] args) { SpringApplication.run(ConsumerDeptRibbonApplication.class, args); }}[url=][/url]
[url=][/url]
@Servicepublic class DeptService { @Autowired private RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "hiError") public String sayHi(String message) { //这里指指定了服务名称,不用管ip 地址与端口 return restTemplate.getForObject("http://SPRING-CLOUD-LEARN-PROVIDER-DEPT/hi?message=" + message, String.class); } public String hiError(String message) { return "Hi,your message is :\"" + message + "\" but request error."; }}[url=][/url]
二、Feign中使用熔断器
feign: hystrix: enabled: true
[url=]
[/url]
@Componentpublic class DeptServiceHystrix implements DeptService { @Override public String sayHi(String message) { return "Hi,your message is :\"" + message + "\" but request error."; }}[url=]
[/url]
[url=]
[/url]
//服务提供者的名字@FeignClient(value = "spring-cloud-learn-provider-dept", fallback = DeptServiceHystrix.class)publicinterface DeptService { @RequestMapping(value = "hi", method = RequestMethod.GET) String sayHi(@RequestParam(value = "message") String message);}[url=]
[/url]
[url=]
[/url]
@Componentpublic class DeptServiceFallbackFactory implements FallbackFactory<DeptService> { @Override publicDeptService create(Throwable throwable) { return new DeptService() { @Override public String sayHi(String message) { return "Hi,your message is :\"" + message + "\" but request error."; } }; }}[url=]
[/url]
三、熔断器仪表盘监控
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId></dependency>
[url=]
[/url]
@SpringBootApplication@EnableDiscoveryClient@EnableFeignClients@EnableHystrixDashboardpublic classConsumerDeptFeignApplication { public static void main(String[] args) { SpringApplication.run(ConsumerDeptFeignApplication.class, args); }}[url=]
[/url]
[url=]
[/url]
@Configurationpublic class HystrixDashboardConfiguration { @Bean public ServletRegistrationBean getServlet() { HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet(); ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet); registrationBean.setLoadOnStartup(1); registrationBean.addUrlMappings("/hystrix.stream"); registrationBean.setName("HystrixMetricsStreamServlet"); return registrationBean; }}[url=]
[/url]