<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version> </parent> <properties> <spring-cloud.version>Finchley.SR2</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Eureka-Client 依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!-- Feign 依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!-- Hystrix 依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <!-- SpringCloud 版本控制依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
@EnableFeignClients @EnableCircuitBreaker public class MessageCenterApplication { public static void main(String[] args) { new SpringApplicationBuilder(MessageCenterApplication.class).web(WebApplicationType.SERVLET).run(args); } }
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootApplication @EnableDiscoveryClient @EnableCircuitBreaker public @interface SpringCloudApplication { }
@GetMapping("/msg/get") @HystrixCommand(fallbackMethod = "getMsgFallback") public Object getMsg() { String msg = messageService.getMsg(); return msg; } public Object getMsgFallback() { return "祝您 2019 猪年大吉,'猪'事如意!"; }
/** * 获取消息详情 */ @GetMapping("/api/v1/msg/detail/{id}") @HystrixCommand(fallbackMethod = "getDetailFallback") public MessageEntity getDetail(@PathVariable(name = "id") Long id) { return messageService.getById(id); } /** * 获取消息详情退路 */ public MessageEntity getDetailFallback(Long id){ return null; }
@FeignClient(name = "message-service", fallback = MessageServiceFallback.class) public interface MessageServiceClient { @GetMapping("/api/v1/msg/get") public String getMsg(); }
@Component public class MessageServiceFallback implements MessageServiceClient { @Override public String getMsg() { System.out.println("调用消息接口失败,对其进行降级处理!"); return "消息接口繁忙,请稍后重试!"; } }
feign: hystrix: enabled: true
<!-- Actuator 依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
management: endpoints: web: exposure: include: hystrix.stream
<!-- Hystrix Dashboard 依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency>
@EnableFeignClients @SpringCloudApplication @EnableHystrixDashboard public class MessageCenterApplication { public static void main(String[] args) { new SpringApplicationBuilder(MessageCenterApplication.class).web(WebApplicationType.SERVLET).run(args); } }