Im Frühjahrs-Cloud-Netflix-Stack stellt jeder Mikrodienst seinen eigenen Dienst in Form einer HTTP-Schnittstelle bereit, sodass dieser beim Aufruf von Remote-Diensten über HTTP verwendet werden muss Kunde. Wir können die native URLConnection von JDK, den HTTP-Client von Apache, den asynchronen HTTP-Client von Netty und das RestTemplate von Spring verwenden. Am bequemsten und elegantesten ist jedoch Feign.
Feign ist ein deklarativer HTTP-Client mit Vorlagen. Mit Feign in Spring Cloud können wir das gleiche Codierungserlebnis erzielen wie beim Aufruf lokaler Methoden, wenn wir HTTP zum Anfordern von Remote-Diensten verwenden. Entwickler sind sich überhaupt nicht bewusst, dass es sich um eine Remote-Methode handelt, geschweige denn um eine HTTP-Anfrage.
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-feign</artifactId> </dependency>
@FeignClient(name="SPRING-PRODUCER-SERVER/spring")public interface FeignUserClient { @RequestMapping( value = "/findAll/{name}",method = RequestMethod.GET) public List<SpringUser> findAll(@PathVariable("name") String name); @RequestMapping( value = "/findUserPost",method = RequestMethod.POST) public SpringUser findUserPost(@RequestBody SpringUser springUser);//复合类型好像默认是POST请求 }
@Configuration @ComponentScan @EnableAutoConfiguration @EnableEurekaClient @EnableFeignClientspublic class SpringConsumerServerFeignApplication {public static void main(String[] args) { SpringApplication.run(SpringConsumerServerFeignApplication.class, args); } }
spring: application: name: spring-consumer-server-feign server: port: 8084 context-path: /spring #服务注册中心的配置内容,指定服务注册中心的位置 eureka: client: serviceUrl: defaultZone: http://user:password@localhost:8761/eureka/
@Configurationpublic class FooConfiguration { @Beanpublic Contract feignContract() {//这将SpringMvc Contract 替换为feign.Contract.Defaultreturn new feign.Contract.Default(); } }
@FeignClient(name="SPRING-PRODUCER-SERVER/spring",configuration=FooConfiguration.class)public interface FeignUserClient { @RequestLine("GET /findAll/{name}")public List<SpringUser> findAll(@Param("name") String name); /* @RequestMapping( value = "/findAll/{name}",method = RequestMethod.GET) public List<SpringUser> findAll(@PathVariable("name") String name); @RequestMapping( value = "/findUserPost",method = RequestMethod.POST) public SpringUser findUserPost(@RequestBody SpringUser springUser);*/}
@RequestLine:是feign的注解 为每个创建的Feign客户端创建一个记录器。默认情况下,记录器的名称是用于创建Feign客户端的接口的完整类名。Feign日志记录仅响应DEBUG级别。logging.level.project.user.UserClient: DEBUG 在配置文件application.yml 中加入:
logging: level: com.jalja.org.spring.simple.dao.FeignUserClient: DEBUG
@Configurationpublic class FooConfiguration { /* @Bean public Contract feignContract() { //这将SpringMvc Contract 替换为feign.Contract.Default return new feign.Contract.Default(); }*/@Bean Logger.Level feignLoggerLevel() {//设置日志return Logger.Level.FULL; } }
Diese Konfiguration dient dazu, das Timeout von Hystrix auf 5 Sekunden zu ändern Methode 2hystrix.command. default.execution.timeout.enabled: false
Diese Konfiguration wird verwendet, um die Timeout-Periode von Hystrix zu deaktivierenMethode 3
feign.hystrix.enabled: false
Diese Konfiguration wird verwendet, um einfach Feigns Hystrix zu deaktivieren . Dieser Ansatz wird außer in einigen besonderen Szenarien nicht empfohlen.
Das obige ist der detaillierte Inhalt vonFeign of Spring Cloud verwendet HTTP, um Remote-Dienste anzufordern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!