1. Обзор
В этом руководстве мы опишем, как мы можем разрешить клиенту Feign входить в наше приложение Spring Boot. Кроме того, мы рассмотрим различные типы конфигураций для него. Чтобы узнать больше о клиенте Feign, ознакомьтесь с нашим подробным руководством .
2. Притвориться клиентом
**Feign — это клиент декларативной веб-службы , который работает путем обработки аннотаций в шаблонный запрос. ** Используя клиент Feign, мы избавляемся от стандартного кода для выполнения запросов HTTP API. Нам просто нужно добавить аннотированный интерфейс. Таким образом, фактическая реализация будет создана во время выполнения.
3. Конфигурация ведения журнала
Ведение журнала клиента Feign помогает нам лучше видеть сделанные запросы. Чтобы включить ведение журнала, нам нужно установить уровень ведения журнала Spring Boot на DEBUG
для класса
или пакета
, который содержит наш фиктивный клиент в приложении.
файл свойств
.
Давайте установим свойство уровня логирования для класса:
logging.level.<packageName>.<className> = DEBUG
Или, если у нас есть пакет, в который мы помещаем всех наших фиктивных клиентов, мы можем добавить его для всего пакета:
logging.level.<packageName> = DEBUG
Далее нам нужно установить уровень ведения журнала для клиента feign. Обратите внимание, что предыдущий шаг был просто для включения ведения журнала.
На выбор предлагается четыре уровня ведения журнала:
НЕТ:
нет регистрации (ПО УМОЛЧАНИЮ)BASIC:
регистрирует метод и URL-адрес запроса, а также код состояния ответа и время выполнения .ЗАГОЛОВКИ:
регистрирует основную информацию вместе с заголовками запросов и ответов.FULL
: регистрирует заголовки, тело и метаданные как для запросов, так и для ответов.
Мы можем настроить их через конфигурацию Java или в нашем файле свойств.
3.1. Конфигурация Java
Нам нужно объявить класс конфигурации, назовем его FeignConfig
:
public class FeignConfig {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}
После этого мы привяжем класс конфигурации к нашему фиктивному клиентскому классу FooClient
:
@FeignClient(name = "foo-client", configuration = FeignConfig.class)
public interface FooClient {
// methods for different requests
}
3.2. Использование свойств
Второй способ — установить его в нашем application.properties.
Давайте укажем здесь имя нашего фиктивного клиента, в нашем случае foo-client
:
feign.client.config.foo-client.loggerLevel = full
Или мы можем переопределить уровень конфигурации по умолчанию для всех фиктивных клиентов:
feign.client.config.default.loggerLevel = full
4. Пример
В этом примере мы настроили клиент для чтения из API JSONPlaceHolder . Мы получим всех пользователей с помощью клиента feign.
Ниже мы объявим класс UserClient
:
@FeignClient(name = "user-client", url="https://jsonplaceholder.typicode.com", configuration = FeignConfig.class)
public interface UserClient {
@RequestMapping(value = "/users", method = RequestMethod.GET)
String getUsers();
}
Мы будем использовать тот же FeignConfig
, который мы создали в разделе «Конфигурация». Обратите внимание, что уровень ведения журнала остается Logger.Level.FULL
.
Давайте посмотрим, как выглядит журнал, когда мы вызываем /users
:
2021-05-31 17:21:54 DEBUG 2992 - [thread-1] com.foreach.UserClient : [UserClient#getUsers] ---> GET https://jsonplaceholder.typicode.com/users HTTP/1.1
2021-05-31 17:21:54 DEBUG 2992 - [thread-1] com.foreach.UserClient : [UserClient#getUsers] ---> END HTTP (0-byte body)
2021-05-31 17:21:55 DEBUG 2992 - [thread-1] com.foreach.UserClient : [UserClient#getUsers] <--- HTTP/1.1 200 OK (902ms)
2021-05-31 17:21:55 DEBUG 2992 - [thread-1] com.foreach.UserClient : [UserClient#getUsers] access-control-allow-credentials: true
2021-05-31 17:21:55 DEBUG 2992 - [thread-1] com.foreach.UserClient : [UserClient#getUsers] cache-control: max-age=43200
2021-05-31 17:21:55 DEBUG 2992 - [thread-1] com.foreach.UserClient : [UserClient#getUsers] content-type: application/json; charset=utf-8
2021-05-31 17:21:55 DEBUG 2992 - [thread-1] com.foreach.UserClient : [UserClient#getUsers] date: Mon, 31 May 2021 14:21:54 GMT
// more headers
2021-05-31 17:21:55 DEBUG 2992 - [thread-1] com.foreach.UserClient : [UserClient#getUsers] [
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz",
// more user details
},
// more users objects
]
2021-05-31 17:21:55 DEBUG 2992 - [thread-1] com.foreach.UserClient : [UserClient#getPosts] <--- END HTTP (5645-byte body)
В первой части журнала мы видим зарегистрированный запрос
; Конечная точка URL с его методом HTTP GET. В этом случае, поскольку это запрос GET ,
у нас нет тела запроса.
Вторая часть содержит ответ
. Он показывает заголовки
и тело
ответа .
5. Вывод
В этом кратком руководстве мы рассмотрели механизм ведения журнала клиента Feign и то, как мы можем его включить. Мы увидели, что есть несколько способов настроить его в зависимости от наших потребностей.
Как всегда, пример, показанный в этом руководстве, доступен на GitHub .