В предыдущей статье мы можем обнаружить, что, когда мы вызовываем API других сервисов через Resttemplate, необходимые параметры должны быть сплачиваются в запрошенном URL. Если меньше параметров, мы можем терпеть его. После того, как появится несколько параметров, сплайсинг строки запроса будет неэффективной и кажущейся глупыми.
Так есть ли лучшее решение? Ответ уверен, и Netflix предоставил нам структуру: Feign.
Feign - это декларативный клиент веб -службы, и его цель состоит в том, чтобы упростить вызовы веб -служб. Feign предоставляет шаблон для HTTP -запросов. Написав простые интерфейсы и аннотации вставки, вы можете определить параметры, форматы, адреса и другую информацию о HTTP -запросах.
Feign будет полностью прокси -запросы HTTP, и нам просто нужно назвать его как вызов метода для выполнения запроса на обслуживание и соответствующей обработки. Файн интегрирует ленту и Hystrix (мы поговорим о Hystrix позже), поэтому мы больше не можем использовать эти два компонента явно.
Короче говоря, Feign имеет следующие характеристики:
Это немного похоже на картирование запроса уровня контроллера нашего шаблона SpringMVC. Этот шаблон - это то, что нам действительно нравится. Файн использует @feignclient для карты служб.
Во -первых, первым шагом является создание нового модуля Feign на исходной основе, а затем ввести связанные зависимости и притворяться зависимостями, которые автоматически вводят зависимости Hystrix следующим образом:
<depervice> <groupid> org.springframework.cloud </GroupId> <ArtifactId> Spring-Cloud-Starter-eureka </artifactid> <sersive> 1.3.5.release </version> </artefact> <gressiad> org.springframework.cloud </GroupId> <ArtifactId> spring-cloud-starTerTarTerTarTerTraterS-starTerTarTerTrater. <версия> 1.4.0.release </version> </vehysendion>
Конфигурация Application.yml выглядит следующим образом:
Сервер: Порт: 8083Spring: Приложение: Имя: Feign-Consumereureka: Client: Service-url: defaultzone: http: // localhost: 8888/eureka/, http: // localhost: 8889/eureka/
Затем, в предыдущей статье, в службу модулей Modules добавлено несколько новых методов, как показано в следующем коде:
/*** Создано Конг на 2018/5/8. */ @RestControllerPublic Class HelloController {@RequestMapping ("/hello") public String hello () {System.out.println ("доступ к 1 ..."); вернуть "Hello1"; } @RequestMapping ("/hjcs") public list <string> laowangs (String Ids) {list <string> list = new ArrayList <> (); list.add ("laowang1"); List.Add ("laowang2"); List.Add ("laowang3"); вернуть список; } // Добавлен метод @Requestmapping (value = "/hellol", method = requestMethod.get) public String Hello (@RequestParam String name) {return "hello" + name; } @RequestMapping (value = "/hello2", method = requestMethod.get) Общественный пользователь Hello (@Requestheader String name, @requestheader Integer Age) {return New User (имя, возраст); } @RequestMapping (value = "/hello3", method = requestMethod.post) public String hello (пользователь пользователя @Requestbody) {return "hello"+ пользователь. getName () + "," + пользователь. getage (); }}Далее следует класс пользователя, необходимый для приведенного выше кода, код заключается в следующем:
/*** Создано Cong 2017/12/2. */public class user {private String name; частный целый возраст; // При сериализации передачи должен быть пустой конструктор, в противном случае возникнет ошибка. public user () {} public user (String name, Integer Age) {this.name = name; this.age = возраст; } public String getName () {return name; } public void setName (string name) {this.name = name; } public integer getage () {return Age; } public void setage (целый возраст) {this.age = age; }}Далее используйте Feign's @FeignClient («Имя службы»), чтобы отобразить сервисный вызов. Код заключается в следующем:
пакет hjc; import org.springframework.cloud.netflix.feign.feignclient; импорт org.springframework.web.bind.nantation.*;/*** Создан Конг на 2018/5/17. */// configuration = xxx.class Этот класс настраивает некоторые точные свойства Hystrix // value = "Имя службы, которое вы использовали" @feignclient (value = "hello-service", swarkback = feignfallback.class) открытый интерфейс FeignService {// Картирование метода в службе @Requestmapping ("/hello") string helly hello ();); @Requestmapping (value = "/hellol", method = requestMethod.get) string hello (@RequestParam ("name") String name); @Requestmapping (value = "/hello2", method = requestMethod.get) пользователь Hello (@Requestheader ("name") String name, @Requestheader ("age") Integer Age); @Requestmapping (value = "/hello3", method = requestMethod.post) string hello (пользователь пользователя @Requestbody);}Затем введите интерфейс Feiservice в уровень контроллера для выполнения удаленных сервисных вызовов. Код заключается в следующем:
/*** Создано Конг на 2018/5/17. */ @Restcontrollerpublic class consumercontroller {@autowired feignservice feignservice; @Requestmapping ("/consumer") public String helloconsumer () {return feignservice.hello (); } @RequestMapping ("/consumer2") public String helloConsumer2 () {String R1 = FeignService.hello ("hjc"); String r2 = feignservice.hello ("hjc", 23) .toString (); String r3 = feignservice.hello (новый пользователь ("hjc", 23)); вернуть r1 + "-----" + r2 + "----" + r3; }}Затем, где аннотировать клиент Eureka в классе запуска модуля Fainul
@Enablefeignclients, код следующим образом:@SpringBootApplication@enabledIscoveryClient@enableFienClientsSpublic Class FeignApplication {public static void main (string [] args) {SpressApplication.Run (feignApplication.class, args); }}Затем запустите класс запуска, введите Localhost: 8083/Consumer в браузере, и результат выполнения следующего:
Вы можете видеть, что опрос балансировки нагрузки появляется Hello1 и Hello2.
Затем продолжайте входить в Localhost: 8083/Consumer2 в браузере, и результат работы заключается в следующем:
Далее мы используем услуги по снижению в соответствии с Службой декларативного вызовов. Затем мы должны создать новый класс FeignFallback, чтобы унаследовать Feiservice. Код заключается в следующем:
пакет hjc; импорт org.springframework.stereotype.component;/*** Создан Конг на 2018/5/17. */ @ComponentPublic Class FeignFallback реализует FeignService {// Метод реализации - это метод понижения сервисного вызова @Override public String hello () {return "error"; } @Override public String hello (string name) {return "error"; } @Override public user hello (string name, integer age) {return new user (); } @Override public String hello (пользователь пользователя) {return "error"; }}Затем мы останавливаем два модуля поставщика услуг поставщика провайдера1 и модулей Provider2, и результаты работают следующие:
Вы можете видеть, что наши звонки имеют все пониженные услуги.
Затем, если мы хотим точно управлять параметрами Hystrix, например, параметры в сочетании с Hystrix, вы можете настроить атрибут Configuration = XXX Class.class в аннотации FeignClient, чтобы точно указать свойства, в каком классе.
Или настроить его в Application.yml, следующим образом:
Hystrix: Команда: по умолчанию: выполнение: Изоляция: Поток: TimeOutInmilliseconds: 5000Ribbon: ConnectTimeout: 500 #если вы хотите подробно настроить отдельную службу, следующим образом Hello-Service: лента: ConnectTimeout: 500
Это удовлетворяет звонкам большинства наших сценариев, но если вы пишете прекрасные сценарии, вам все равно нужно использовать Native Hystrix и следить за нашим предыдущим использованием Hystrix. Только не используйте Failign Client Calls, следующим образом:
/*** Создано Конг на 2018/5/17. */public class hjccommand расширяет hystrixcommand {защищенный hjccommand (hystrixcommandgroupkey Group) {super (группа); } @Override Protected Object run () бросает исключение {return null; }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.