Вопрос или проблема
Мы используем Spring Boot OpenFeign с нашими приложениями на Java 8 и Spring Boot 2.0.3. OpenFeign используется для выполнения REST-запросов к другим сервисам. Мы пытаемся настроить агент Java New Relic так, чтобы он “видел” вызовы Feign как часть трасс, но он их вовсе не инструментаризует.
- Является ли OpenFeign веб-клиентом или это библиотека, которая использует веб-клиент?
- Как мы можем узнать, какой веб-клиент он использует?
- Как мы можем его изменить?
Нам сказали, что New Relic поддерживает только следующие HTTP-клиенты, мы можем только предполагать, что Feign не использует ни один из них:
Akka HTTP 2.4.5 до последней
Akka Http Core с 0.4 до последней
AsyncHttpClient 2.0.0-RC1 до последней
HttpAsyncClient 4.1 до последней
Apache Httpclient с 3.1 до 5.x
java.net.HttpURLConnection
OkHttp 3.6.0 до последней
Ning AsyncHttpClient 1.x
Spring webclient с 5.0.0.release до последней
STTP v2
Вот как мы включаем Feign:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
- Является ли OpenFeign веб-клиентом или это библиотека, которая использует веб-клиент?
Feign является REST-клиентом и использует httpClient.
- Как мы можем узнать, какой веб-клиент он использует?
- Как мы можем его изменить?
Посмотрите в ваш application.yaml
Ищите что-то вроде:
feign.*client.enable=true
Второй способ определить клиента — с помощью аннотации:
@ConditionalOnProperty(value = "feign.httpclient.enabled", matchIfMissing = true) // включает Apache httpClient
Но, скорее всего, вы не определили его. Тогда это будет значение по умолчанию:
java.net.HttpURLConnection
Ответ или решение
Определение HTTP клиента, используемого в Spring Cloud Feign: Полное руководство
Введение
Вы используете Spring Boot с OpenFeign для выполнения REST-запросов в вашем приложении на Java 8 (версия Spring Boot 2.0.3). Вы сталкиваетесь с проблемой интеграции New Relic для отслеживания вызовов Feign, и вам необходимо разобраться в том, какой клиент HTTP используется в вашем приложении. Давайте подробно разберем ваш запрос.
1. Является ли OpenFeign веб-клиентом или библиотекой, использующей веб-клиент?
OpenFeign является REST-клиентом, который предоставляет декларативный способ отправки HTTP-запросов. Он использует под собой клиент HTTP, который фактически исполняет сетевые вызовы. Это означает, что OpenFeign можно рассматривать не как веб-клиент по своей сути, а как библиотеку, использующую веб-клиент для отправки HTTP-запросов.
2. Как узнать, какой веб-клиент используется?
Для определения используемого HTTP-клиента в Spring Cloud Feign, вам следует обратить внимание на конфигурационные файлы вашего приложения.
-
Файл application.yaml:
Проверьте наличие конфигурации, связанной с клиентом Feign. Например, строка типа:feign.httpclient.enabled: true
Если таких строк нет, это может означать, что используется клиент по умолчанию.
-
Аннотация в коде:
Ваша конфигурация может содержать аннотацию, которая управляет выбором клиента. Например,@ConditionalOnProperty(value = "feign.httpclient.enabled", matchIfMissing = true)
Указывает на то, что используется
Apache HttpClient
, если свойство не задано. -
Клиент по умолчанию:
Если вы не настроили конкретный веб-клиент, OpenFeign используетjava.net.HttpURLConnection
в качестве клиента по умолчанию.
3. Как изменить HTTP-клиент?
Изменение HTTP-клиента в OpenFeign может быть выполнено через конфигурацию в вашем приложении:
-
Для использования Apache HttpClient:
Вам необходимо добавить зависимость для Apache HttpClient в ваш файлpom.xml
:<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> <!-- Установите желаемую версию --> </dependency>
Затем добавьте в
application.yaml
илиapplication.properties
:feign.httpclient.enabled: true
-
Для использования OkHttp или других клиентов:
Аналогично, добавьте нужные зависимости для вашего желаемого клиента и настройте его через конфигурацию. Например, для OkHttp:<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.9.0</version> <!-- Установите желаемую версию --> </dependency>
Вывод
Таким образом, OpenFeign — это действительно библиотека, использующая HTTP-клиент, а не отдельный клиент. Для выявления используемого клиента вам достаточно проверить конфигурации вашего приложения и, при необходимости, изменить HTTP-клиент на желаемый, добавляя соответствующие зависимости и конфигурации. Это позволит не только исправить проблемы с трассировкой вызовов Feign в New Relic, но и улучшить взаимодействие вашего приложения с REST-сервисами.
Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.