spring cloud feign – как узнать, какой HTTP-клиент он использует?

Вопрос или проблема

Мы используем Spring Boot OpenFeign с нашими приложениями на Java 8 и Spring Boot 2.0.3. OpenFeign используется для выполнения REST-запросов к другим сервисам. Мы пытаемся настроить агент Java New Relic так, чтобы он “видел” вызовы Feign как часть трасс, но он их вовсе не инструментаризует.

  1. Является ли OpenFeign веб-клиентом или это библиотека, которая использует веб-клиент?
  2. Как мы можем узнать, какой веб-клиент он использует?
  3. Как мы можем его изменить?

Нам сказали, что 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>

  1. Является ли OpenFeign веб-клиентом или это библиотека, которая использует веб-клиент?

Feign является REST-клиентом и использует httpClient.

  1. Как мы можем узнать, какой веб-клиент он использует?
  2. Как мы можем его изменить?

Посмотрите в ваш 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-сервисами.

Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...