Heim  >  Artikel  >  Java  >  Feign of Spring Cloud verwendet HTTP, um Remote-Dienste anzufordern

Feign of Spring Cloud verwendet HTTP, um Remote-Dienste anzufordern

巴扎黑
巴扎黑Original
2017-06-26 11:09:372128Durchsuche

1. Einführung in Feign

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.

2. Die Verwendung von Feign in Spring Cloud

2
      <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请求
}
@FeignClient(name="SPRING-PRODUCER-SERVER/spring"): wird verwendet, um die Feign-Komponente zu benachrichtigen, die Schnittstelle als Proxy zu verwenden (Keine Notwendigkeit Um die Schnittstellenimplementierung zu schreiben, gibt das Namensattribut an, welchen Dienst wir aufrufen möchten. Benutzer können direkt über @Autowired injizieren.
  • @RequestMapping gibt an, dass beim Aufruf dieser Methode eine GET-Anfrage an /group/{groupId} gesendet werden muss.
  • @PathVariable hat die gleiche Bedeutung wie die entsprechende Annotation in SpringMVC.
  • Prinzip: Wenn eine Spring Cloud-Anwendung gestartet wird, scannt Feign die mit der Annotation @FeignClient gekennzeichnete Schnittstelle, generiert einen Proxy und registriert ihn im Spring-Container. Beim Generieren eines Proxys erstellt Feign für jede Schnittstellenmethode ein RequetTemplate-Objekt. Dieses Objekt kapselt alle für die HTTP-Anfrage erforderlichen Informationen. Der Name des Anforderungsparameters, die Anforderungsmethode und andere Informationen werden in diesem Prozess festgelegt .
3. Anmerkungen zur Startup-Klasse hinzufügen

4. Konfigurationsdatei application.yml
@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/
3. Angepasste Feign-Konfiguration

1. Angepasste Konfiguration

@Configurationpublic class FooConfiguration {
    @Beanpublic Contract feignContract() {//这将SpringMvc Contract 替换为feign.Contract.Defaultreturn new feign.Contract.Default();
    }
}

Protokollebene in der benutzerdefinierten Konfigurationsklasse hinzufügen
@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
PS: Zeitüberschreitung bei Anforderung vortäuschen Problem

Das Standard-Timeout von Hystrix beträgt 1 Sekunde. Erfolgt nach dieser Zeit keine Antwort, wird der Fallback-Code eingegeben. Die erste Anfrage ist oft langsam (aufgrund des Lazy-Loading-Mechanismus von Spring, der die Instanziierung einiger Klassen erfordert), und die Antwortzeit kann länger als 1 Sekunde sein
Es gibt drei Lösungen, am Beispiel von Feign.
@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;
    }
}
Methode 1
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 5000

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 deaktivieren

Methode 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn