«1. Обзор

В этом руководстве мы собираемся описать различия между Spring Cloud Netflix Feign и Spring Cloud OpenFeign.

2. Feign

Feign упрощает написание клиентов веб-сервисов, предоставляя поддержку аннотаций, которая позволяет нам реализовывать наши клиенты только с интерфейсами.

Первоначально Feign был создан и выпущен Netflix как часть их проекта Netflix OSS. Сегодня это проект с открытым исходным кодом.

2.1. Spring Cloud Netflix Feign

Spring Cloud Netflix интегрирует предложения Netflix OSS в экосистему Spring Cloud. Сюда входят Feign, Eureka, Ribbon и множество других инструментов и утилит. Однако Feign был предоставлен собственный Spring Cloud Starter, чтобы разрешить доступ только к Feign.

2.2. OpenFeign

В конце концов, Netflix решила прекратить внутреннее использование Feign и прекратила его разработку. В результате этого решения Netflix полностью передал Feign сообществу разработчиков открытого исходного кода в рамках нового проекта под названием OpenFeign.

К счастью, он продолжает получать огромную поддержку со стороны сообщества разработчиков открытого исходного кода и имеет много новых функций и обновлений.

2.3. Spring Cloud OpenFeign

Подобно своему предшественнику, Spring Cloud OpenFeign интегрирует предшествующий проект в экосистему Spring Cloud.

Удобно, что эта интеграция добавляет поддержку аннотаций Spring MVC и предоставляет те же HttpMessageConverters.

Давайте сравним реализацию Feign, найденную в Spring Cloud OpenFeign, с реализацией, использующей Spring Cloud Netflix Feign.

3. Зависимости

Во-первых, мы должны добавить зависимости spring-cloud-starter-feign и spring-cloud-dependencies в наш файл pom.xml:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
    <versionId>1.4.7.RELEASE</versionID>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>Hoxton.SR8</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

Обратите внимание, что эта библиотека работает только с Spring Boot 1.4.7 или более ранней версии. Поэтому наш pom.xml должен использовать совместимые версии любых зависимостей Spring Cloud.

4. Реализация с помощью Spring Cloud Netflix Feign

Теперь мы можем использовать @EnableFeignClients, чтобы включить сканирование компонентов для любых интерфейсов, использующих @FeignClient.

Для каждого примера, который мы разработали с помощью проекта Spring Cloud Netflix Feign, мы используем следующие импорты:

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;

Реализация всех функций абсолютно одинакова для старой и новой версии.

5. Реализация с помощью Spring Cloud OpenFeign

Для сравнения, наше руководство по Spring Cloud OpenFeign содержит тот же пример, что и реализация с помощью Spring Netflix Feign.

Единственная разница здесь в том, что наши импорты из другого пакета:

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

Все остальное то же самое, что не должно вызывать удивления из-за связи между этими двумя библиотеками.

6. Сравнение

По сути, эти две реализации Feign идентичны. Мы можем приписать это тому, что Netflix Feign является предком OpenFeign.

Однако Spring Cloud OpenFeign включает новые параметры и функции, недоступные в Spring Cloud Netflix Feign.

Недавно мы получили поддержку Micrometer, Dropwizard Metrics, HTTP-клиента Apache 5, HTTP-клиента Google и многих других.

7. Заключение

В этой статье сравнивались интеграции OpenFeign и Netflix Feign в Spring Cloud. Как обычно, вы найдете исходники на GitHub как для Spring Cloud OpenFeign, так и для Netflix Feign.