Композиция Feign
интерфейс |
эффект |
По умолчанию |
---|---|---|
Feign.Builder |
Вход в Притворство |
Feign.Builder |
Client |
Что Feign использует внизу, чтобы запросить |
При работе с лентой:LoadBalancerFeignClient Когда вы не работаете с лентой: Fgien.Client.Default
|
Contract |
договор, поддержка аннотаций |
SpringMVCContract |
Encoder |
Декодер для преобразования эксклюзивов в тело сообщения HTTP-запроса |
SpringEncoder |
Decoder |
Кодировщик, который преобразует соответствующее тело сообщения в объект |
ResponseEntityDecoder |
Logger |
менеджер журналов |
Slf4jLogger |
RequestInterceptor |
Используется для добавления общей логики к каждому запросу (например, перехватчик: например, желание услышать каждый запрос) |
никто |
Уровень журнала Фейна
уровень журнала |
распечатать содержимое |
---|---|
НЕТ (по умолчанию) |
не записывать никаких |
BASIC |
Только метод запроса журнала, URL-адрес, код состояния ответа и время выполнения (подходит для производственных сред) |
HEADERS |
На основе записи БАЗОВОГО уровня записывается заголовок запроса и ответа |
FULL |
Запись запроса аккорда в начале, теле и метаданных |
Как интегрировать Feign в первую очередь
Следуйте за трехконечным топором SpringBootШаг 1: Добавьте зависимости
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
Шаг 2: Пишите заметки
@EnableFeignClients //在启动类上加
Шаг 3: Напишите конфигурацию
Как добавить уровень логирования в Feign
мелкозернистый
Метод 1: реализация кодаШаг 1: Добавьте класс конфигурации Feign, который можно добавить в основной класс, но добавлять его не нужно.@Configuration
. если добавлено@Configuration
И он помещается в основной класс, тогда все экземпляры клиента Feign будут общими, а конфликт загрузки контекста родитель-потомок такой же, как у класса конфигурации ленты; если его нужно добавить@Configuration
, сразу за пакетом загрузки основного класса. Рекомендуется не добавлять@Configuration
.
public class FeignConfig {
@Bean
public Logger.Level Logger() {
return Logger.Level.FULL;
}
}
Шаг 2: Дайте@FeignClient
Добавить класс конфигурации
//@FeignClient configuration = GoodsFeignConfig.class 细粒度配置,指定配置类
@FeignClient(name = "goods", configuration = FeignConfig.class)
Шаг 4: Напишите конфигурацию
logging:
level:
com.xxx.xxx.FeignAPI: DEBUG #需要将FeignClient接口全路径写上# 开启日志 格式为logging.level.+Feign客户端路径
Способ 2: реализация свойства конфигурации
feign:
client:
config:
#想要调用的微服务名称
server-1:
loggerLevel: FULL
Глобальная конфигурация
Метод 1: реализация кодаДобавлен@Configuration
Поместите его в основной класс, тогда все экземпляры клиента Feign будут общими, а конфликт загрузки контекста между родителем и дочерним элементом будет таким же, как и в классе конфигурации ленты; пусть ComponentScan контекста между родителем и дочерним элементом перекрывается (настоятельно не рекомендуется).единственный правильный путь
//在启动类上为@EnableFeignClients注解添加defaultConfiguration配置
@EnableFeignClients(defaultConfiguration = FeignConfig.class)
Способ 2: реализация свойства конфигурации
feign:
client:
config:
#将调用的微服务名称改成default就配置成全局的了
default:
loggerLevel: FULL
Элементы конфигурации, поддерживаемые Feign
Код пути
элемент конфигурации |
эффект |
---|---|
Logger.Level |
указать уровень журнала |
Retryer |
Укажите стратегию повтора |
ErrorDecoder |
Указать декодер ошибок |
Request.Options |
сверхурочное время |
Collection |
перехватчик |
SetterFactory |
Используется для установки свойств конфигурации Hystrix, Fgien будет использоваться только при интеграции Hystrix. |
свойства конфигурации
feign:
client:
config:
feignName:
connectTimeout: 5000 # 相当于Request.Optionsn 连接超时时间
readTimeout: 5000 # 相当于Request.Options 读取超时时间
loggerLevel: full # 配置Feign的日志级别,相当于代码配置方式中的Logger
errorDecoder: com.example.SimpleErrorDecoder # Feign的错误解码器,相当于代码配置方式中的ErrorDecoder
retryer: com.example.SimpleRetryer # 配置重试,相当于代码配置方式中的Retryer
requestInterceptors: # 配置拦截器,相当于代码配置方式中的RequestInterceptor
- com.example.FooRequestInterceptor
- com.example.BarRequestInterceptor
# 是否对404错误解码
decode404: false
encode: com.example.SimpleEncoder
decoder: com.example.SimpleDecoder
contract: com.example.SimpleContract
Feign также поддерживает сжатие GZIP запросов и ответов для повышения эффективности связи.Конфигурация выглядит следующим образом:
# 配置请求GZIP压缩
feign.compression.request.enabled=true
# 配置响应GZIP压缩
feign.compression.response.enabled=true
# 配置压缩支持的MIME TYPE
feign.compression.request.mime-types=text/xml,application/xml,application/json
# 配置压缩数据大小的下限
feign.compression.request.min-request-size=2048
Конфигурация ленты VS конфигурация Feign
детализация |
Ribbon |
Feign |
---|---|---|
местный код |
@RibbonClient(configuration=RibbonConfig.class) ,RibbonConfig надо добавить класс@Configuration , и должен быть помещен в пакет, который не может быть просканирован родительским контекстом. |
@FeignClient(configuration=FeignConfig.class) ,FeignConfig Категория@Configuration Его можно не указывать (необязательно), если он есть, то его необходимо разместить под пакетом, который не может быть просканирован родительским контекстом. |
глобальный код |
@RibbonClients(defaultConfigurtion=RibbonConfig.class) |
@EnableFeignClients(defaultConfiguration = FeignConfig.class) ... |
Свойства конфигурации Локальные |
.ribbon.NFLoadBalancerClassName ... |
feign.client.config..loggerLevel ... |
Глобальные свойства конфигурации |
никто | feign.client.config.default.loggerLevel |
Метод фиктивного кода VS метод свойства конфигурации
Метод конфигурации |
немного |
недостаток |
---|---|---|
Конфигурация кода |
На основе кода, более гибкий |
Если класс конфигурации Feign добавлен@Configuration Обратите внимание, обратите внимание на контекст родитель-потомок, онлайн-модификации должны быть переупакованы и опубликованы. |
конфигурация свойства |
легко использовать Конфигурация более интуитивно понятна Онлайн-модификацию не нужно переупаковывать, публиковать более высокий приоритет |
Никакая конфигурация кода не является более гибкой в экстремальных сценариях |
Приоритет: детальная конфигурация свойств > детальная конфигурация кода > глобальная конфигурация свойств > глобальная конфигурация кода