Изучение цитат отморозков

Spring Boot
Изучение цитат отморозков

Используйте только притворство весеннего облака, чтобы заменить 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…