Используйте только притворство весеннего облака, чтобы заменить HTTP-клиент в проекте Spring Boot: изучение кавычек отморозков
В проекте нам иногда нужно вызывать сторонниеAPI
, эта ситуация еще более неизбежна в микросервисной архитектуре — связи между различными микросервисами. Например, в общих проектах иногда мы будем использовать HTTP-клиент для отправки HTTP-запросов для совершения вызовов.В микросервисной архитектуре Spring Cloud Feign является более распространенным выбором в корзине семейства Spring Cloud. Итак, как я могу просто использовать Spring Cloud Feign без использования всего Spring Cloud? Это цитата мудакаAPI
Говоря о...
Во-первых, где найтиAPI
Шерстяная ткань?
бесплатноAPI
Особенно много,github
Есть и бесплатныеAPI
сводка адресовrepo
Но это слишком формально. Интересные вещи всегда привлекают друг друга, непреднамеренно я нашел такой сайт, «остаток мужского пола: разговорное искусство» (LoveLive.tools/), при каждом запросе можно получить ласковое словцо (цитата отморозка), неужели это именно то, что мне, прямому из стали, нужно? И особенно добросовестно то, что автор приводитAPI
Лист, поставь лайк автору!
Как вызвать сторонние сервисы?
Во-первых, давайте быстро создадим веб-проект Spring Boot, который я здесь не буду приводить. тогда в нашемgradle
файл добавленspring-cloud-starter-openfeign
полагаться:
compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-openfeign', version: '2.1.3.RELEASE'
Затем аннотация ответа в классе запуска@EnableFeignClients
:
@SpringBootApplication
@EnableFeignClients
public class MyOpenFeignApplication {
public static void main(String[] args) {
SpringApplication.run(MyOpenFeignApplication.class, args);
}
}
Затем мы можем настроить наш клиент, мы сначала создаем класс интерфейса, например вызовBadGuyFeignClient
, и объявлен какFeignClient
:
@FeignClient
public interface BadGuyFeignClient {
}
@FeignClient
Существуют следующие наиболее часто используемые свойства:
-
name
,value
: уточнитьFeignClient
имя, если в проекте используетсяRibbon
,name
Свойство будет использоваться в качестве имени микрослужбы для обнаружения служб; -
url
:url
Обычно используется для отладки, может быть указан вручную@FeignClient
телефонный адрес -
fallback
,fallbackFactory
:fallback
Определите класс отказоустойчивой обработки.При сбое вызова удаленного интерфейса или истечении времени ожидания будет вызываться отказоустойчивая логика соответствующего интерфейса.fallback
Указанный класс должен реализовать@FeignClient
маркированный интерфейс;fallbackFactory
Заводской класс для генерацииfallback
Пример класса, с помощью этого атрибута мы можем реализовать общую отказоустойчивую логику для каждого интерфейса и сократить повторяющийся код; -
configuration
:Feign
Тип конфигурации, вы можете настроитьFeign
изEncoder
,Decoder
,LogLevel
,Contract
; -
path
: определить текущийFeignClient
единый префикс.
Затем мы можем настроить соответствующие атрибуты, здесь мы просто используем функции, аналогичные HTTP-клиенту, поэтому это простая настройка.url
а такжеpath
Эти свойства:
@FeignClient(name = "badGuy", url = "${bab.guy.url}", path = "api")
public interface BadGuyFeignClient {
/**
* 随机获取一句甜言蜜语
*
* @return
*/
@GetMapping("SweetNothings")
String getSweetNothings();
/**
* 获取 count 条甜言蜜语
*
* @param count 获取甜言蜜语条数
* @return Json 格式的结果
*/
@GetMapping("SweetNothings/{count}/Serialization/Json")
QuotationResult<String> getSweetNothingsJsonByCount(@PathVariable("count") Integer count);
}
объявлен какFeignClient
После этого мы можем использовать в коде@Resource
или@Autowire
Для инъекции с помощью:
@Component
public class BadServiceImpl implements BadGuyService {
@Autowired
private BadGuyFeignClient badGuyFeignClient;
@Override
public List<String> getQuotations(Integer count) {
if (count == null || count <= 0) {
String singleQuotation = badGuyFeignClient.getSweetNothings();
return new ArrayList<String>() {{
add(singleQuotation);
}};
}
return badGuyFeignClient.getSweetNothingsJsonByCount(count).getReturnObj();
}
}
потомController
Это написано следующим образом:
@GetMapping({"quotations", "quotations/{count}"})
public ResultWrapper<List<String>> getBadGuyQuotations(
@PathVariable(value = "count", required = false) Integer count
) {
try {
List<String> resultStrings = badGuyService.getQuotations(count);
return new ResultWrapper<>(resultStrings);
} catch (Exception e) {
log.error("Failed to get bad guy quotations.", e);
return new ResultWrapper<List<String>>() {{
setCode("1000002");
setMessage("error");
setData(null);
}};
}
}
После запуска проекта мы можем получить доступhttp://localhost:8088/api/badGuy/quotationsилиhttp://localhost:8088/api/badGuy/quotations/10После числа вы можете получить результат, соответствующий количеству записей. (Полный адрес проекта в конце статьи)
FeignClient
а такжеHttpClient
Какая разница?
HttpClient
То же самое достигается сOkhttp
,Httpurlconnection
,RestTemplate
и т. д., чьи параметры URL создаются программно, а данные отправляются в другие службы. В более сложных случаях придетсяRestTemplate
перейти на более низкий уровеньAPI
при условии, дажеAPI
подробности.
FeignClient
Его больше похоже на предоставление абстракции более высокого уровня на основе сервисов на основе отдыха, написанные на стороне клиентадекларативныйинтерфейсы службы REST и использовать эти интерфейсы для написания клиентских программ. Разработчикам не нужно беспокоиться о реализации этого интерфейса. Это будет динамически настроено Spring во время выполнения. При таком декларативном подходе разработчикам не нужно глубоко понимать уровень HTTP, предоставляемый HTTP.API
деталейRestTemplate
.
В общем и целом,FeignClient
Более абстрактный, простой и гибкий.
Суммировать
В этой статье кратко описано, как использоватьSpring Cloud Feign
Компоненты вместоHttpClient
Для реализации методов вызова сторонних сервисов, помимо интеграцииFeign
компонент, мы также можем добавить его в проектRibbon
Чтобы найти сервис, присоединяйтесьHystrix
Он используется для служебного предохранителя и т. д., так что базовая служба будет полностью построена.
Связь
адрес проекта:GitHub.com/basketball920320/no…