PackageCom.itmuch.cloud;Importorg.springframework.boot.SpringApplication;Importorg.springframework.boot.autoconfigure.SpringBootApplication;Importorg.springframework.cloud.netflix.eureka.EnableEurekaClient;Importorg.springframework.cloud.netflix.feign.enablefeignclients;@ Springbootapplication@enableeurekaclient@enablefeignclients Public classconsumermoviefeignapplication { Public Static voidMain (string[] args) {Springapplication.run (consumermoviefeignapplication.class, args); }}
PackageCom.itmuch.cloud.controller;Importorg.springframework.beans.factory.annotation.Autowired;Importorg.springframework.web.bind.annotation.GetMapping;Importorg.springframework.web.bind.annotation.PathVariable;ImportOrg.springframework.web.bind.annotation.RestController;ImportCom.itmuch.cloud.entity.User;ImportCom.itmuch.cloud.feign.FeignClient2;Importcom.itmuch.cloud.feign.UserFeignClient; @RestController Public classMoviecontroller {@AutowiredPrivateuserfeignclient userfeignclient; //Disable the FeignClient2 hystrix, it will be configured in Configuration2. //feign the Hystrix can be disabled to a client, if the Yml file is configured Feign.hystrix.enabled=flase all feign clients are disabled. @AutowiredPrivateFeignClient2 FeignClient2; @GetMapping ("/movie/{id}") PublicUser FindByID (@PathVariable Long id) {return This. Userfeignclient.findbyid (ID); } @GetMapping ("/{servicename}") Publicstring Findserviceinfofromeurekabyservicename (@PathVariable string serviceName) {return This. Feignclient2.findserviceinfofromeurekabyservicename (ServiceName); }}
Packagecom.itmuch.cloud.feign;Importorg.springframework.cloud.netflix.feign.FeignClient;Importorg.springframework.web.bind.annotation.PathVariable;Importorg.springframework.web.bind.annotation.RequestMapping;ImportCom.itmuch.config.Configuration2;//Disable the FeignClient2 hystrix, it will be configured in Configuration2. @FeignClient (name = "xxxx", url = "http://localhost:8761/", and configuration = Configuration2.class, fallback = Feignclient2fallback.class) Public InterfaceFeignClient2 {@RequestMapping (value= "/eureka/apps/{servicename}") PublicString Findserviceinfofromeurekabyservicename (@PathVariable ("ServiceName") String serviceName);}
package com.itmuch.cloud.feign; public class Feignclient2fallback implements FeignClient2 {@ Override public String Findserviceinfofromeurekabyservicename (String serviceName) { return " Haha "; }}
Package com.itmuch.cloud.feign; Import org.springframework.stereotype.Component; Import Com.itmuch.cloud.entity.User; @Component Public class Implements userfeignclient { @Override public User FindByID (Long id) { new User (); User.setid (0L); return user; }}
Packagecom.itmuch.cloud.feign;Importorg.springframework.cloud.netflix.feign.FeignClient;ImportCom.itmuch.cloud.entity.User;ImportCom.itmuch.config.Configuration1;Importfeign. Param;Importfeign. Requestline; @FeignClient (name= "Microservice-provider-user", configuration = Configuration1.class, fallback = Hystrixclientfallback.class) Public Interfaceuserfeignclient {@RequestLine ("Get/simple/{id}") PublicUser FindByID (@Param ("id") Long ID);}
PackageCom.itmuch.config;ImportOrg.springframework.context.annotation.Bean;Importorg.springframework.context.annotation.Configuration;Importfeign. contract;Importfeign. Logger; @Configuration Public classConfiguration1 {@Bean PublicContract feigncontract () {return Newfeign. Contract.default (); } @Bean logger.level Feignloggerlevel () {returnLogger.Level.FULL; }}
PackageCom.itmuch.config;ImportOrg.springframework.context.annotation.Bean;Importorg.springframework.context.annotation.Configuration;ImportOrg.springframework.context.annotation.Scope;Importfeign. feign;Importfeign.auth.BasicAuthRequestInterceptor; @Configuration Public classConfiguration2 {@Bean Publicbasicauthrequestinterceptor Basicauthrequestinterceptor () {return NewBasicauthrequestinterceptor ("User", "password123"); } //with this in Configuration2, FeignClient2 's hystrix is disabled.@Bean @Scope ("Prototype") PublicFeign.builder Feignbuilder () {//The Feignbuilder method returns Hystrixfeign.builder by default, which means feign default support Hystrix//now change to Feign.builder, disable Hystrix support. returnFeign.builder (); }}
Spring:application:name:microservice-consumer-movie-feign-customizing-without-Hystrixserver:port:7901eureka:client:healthcheck:enabled:trueserviceUrl:defaultZone:http://User:[email Protected]:8761/eurekaInstance:prefer-ip-address:truelogging:level:com.itmuch.cloud.feign.userfeignclient:debug# Solution To resolve the first request-time-out exception: Hystrix.command.default. execution.isolation.thread.timeoutinmilliseconds:5000# or: # Hystrix.command.default. execution.timeout.enabled:false# or: # timeout for Issue:https://github.com/spring-cloud/spring-cloud-netflix/issues/768# Time-Out solution: http://stackoverflow.com/questions/27375557/hystrix-command-fails-with-timed-out-and-no-fallback-available# Hystrix Configuration: https://Github.com/netflix/hystrix/wiki/configuration#execution.isolation.thread.timeoutinmilliseconds
<?xml version= "1.0" encoding= "UTF-8"? ><project xmlns= "http://maven.apache.org/POM/4.0.0" xmlns:xsi= "http ://www.w3.org/2001/XMLSchema-instance "xsi:schemalocation= "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > <modelversion>4.0.0 </modelVersion> <artifactid>microservice-consumer-movie-feign-customizing-without-hystrix</ artifactid> <packaging>jar</packaging> <parent> <groupid>com.itmuch.cloud</grou Pid> <artifactId>microservice-spring-cloud</artifactId> <version>0.0.1-snapshot</ver sion> </parent> <properties> <PROJECT.BUILD.SOURCEENCODING>UTF-8</PROJECT.BUILD.SOURC Eencoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <jav a.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactid>spring-boot-starter-web</artifacti D> </dependency> <dePendency> <groupId>org.springframework.cloud</groupId> <artifactid>spring-cloud -starter-eureka</artifactid> </dependency> <dependency> <groupid>org.spri Ngframework.boot</groupid> <artifactId>spring-boot-starter-actuator</artifactId> </ dependency> <dependency> <groupId>org.springframework.cloud</groupId> &L T;artifactid>spring-cloud-starter-feign</artifactid> </dependency> </dependencies></proj Ect>
SPRINGCLOUD9----Feign-client-without-hystrix