web-dev-qa-db-fra.com

Différences entre netflix.feign et openfeign

Introduction

J'ai récemment utilisé feinte netflix avec du ruban, ce qui était très utile.

Un exemple de ceci est:

@FeignClient(name = "ldap-proxy")
public interface LdapProxyClient  { 
    @RequestMapping(path = "/ldap-proxy/v1/users/{userNameOrEMail}", produces = MediaType.APPLICATION_JSON_VALUE, method = RequestMethod.GET)
    LdapUser search(@PathVariable("userNameOrEMail") String userNameOrEMail);
}

Cependant, à un moment donné, j'ai pensé qu'au lieu d'avoir à coder toutes ces définitions à la main (pour un service Web existant), je devrais voir si un outil existait.

Je suis tombé sur https://github.com/swagger-api/swagger-codegenet vu qu'il existe des exemples de génération de clients, par exemple https://github.com/swagger-api/swagger-codegen/tree/master/samples/client/petstore/Java/feign .

Cependant, une fois que j'ai examiné de près les importations, j'ai remarqué ce qui suit:

import feign.Feign;

La solution opensource de Netflix, d'autre part, a des noms de packages: org.springframework.cloud.netflix.feign.

De plus, j'ai remarqué que les deux utilisent du ruban si disponible, mais la notation de Netflix est beaucoup plus propre avec beaucoup de bonheur en arrière-plan. Par exemple. les @FeignClient La classe d'annotation javadoc indique:

  • Annotation pour les interfaces déclarant qu'un client REST avec cette interface doit être * créé (par exemple pour le câblage automatique dans un autre composant). Si le ruban est disponible, il sera * utilisé pour équilibrer la charge des demandes backend, et l'équilibreur de charge peut être configuré * à l'aide d'un @RibbonClient avec le même nom (c'est-à-dire la valeur) que le client feint.

Cependant, dans le Feign.feign documentation (sur https://github.com/OpenFeign/feign ) Je vois:

RibbonClient remplace la résolution d'URL du client Feign, ajoutant des capacités de routage intelligent et de résilience fournies par Ribbon.

L'intégration nécessite que vous passiez le nom de votre client de ruban en tant que partie hôte de l'URL, par exemple myAppProd.

> MyService api =
> Feign.builder().client(RibbonClient.create()).target(MyService.class,
> "https://myAppProd");

Mes questions sont donc:

  1. quelles sont l'histoire/la relation et les différences entre les deux?
  2. quels sont les avantages et les inconvénients de chacun?

S'agit-il de projets complètement différents sans relation, ou Netflix a-t-il simplement forké/utilisé OpenFeign et modifié pour qu'il soit intégré à leur solution cloud intégrée? Essentiellement, Netflix vient-il d'acquérir et d'intégrer différentes technologies telles que la découverte, le ruban et la simulation à partir de projets open source?

9

org.springframework.cloud.netflix.feign fait partie du projet Spring Cloud Netflix qui fait partie de Spring Cloud .

Spring Cloud utilise OpenFeign sous le capot. Il l'étend pour prendre en charge les annotations Spring MVC et en fait un citoyen de première classe dans l'environnement Spring en fournissant des intégrations pour les applications Spring Boot via la configuration automatique.

De la documentation :

Feign est un client de service Web déclaratif. Spring Cloud ajoute la prise en charge des annotations Spring MVC et de l'utilisation des mêmes HttpMessageConverters utilisés par défaut dans Spring Web. Spring Cloud intègre Ribbon et Eureka pour fournir un client http à charge équilibrée lors de l'utilisation de Feign.

Notez que dans la documentation il y a un lien vers le projet OpenFeign.

Donc, si vous utilisez Spring Boot - il est préférable et plus facile d'utiliser les intégrations Spring Cloud OpenFeign.

Voir aussi le code source .

11
Eien

"Feinte Netflix" est l'ancienne ancienne désignation de projet . La dernière version (dépendance ci-dessous) est datée de juillet 2016.

compile group: 'com.netflix.feign', name: 'feign-core', version:'8.18.0'   // OLD

"Open feign" est la nouvelle désignation de projet . C'est le même projet, mais a été déplacé vers un autre dépôt git et a obtenu un nouvel identifiant de groupe. Ses versions commencent à 9.0.0.

compile group: 'io.github.openfeign', name: 'feign-core', version: '10.0.1'   // NEW

Voir ce numéro de github pour un bref historique de ce qui s'est passé. Plus remarquable encore, vous découvrirez que Feign n'est plus utilisé en interne chez Netflix. : ^ o

14
Paulo Merson