В стеке Spring Cloud Netflix каждый микросервис раскрывает свои собственные услуги в виде интерфейса HTTP, поэтому при вызове удаленной службы необходимо использовать HTTP -клиент. Мы можем использовать Native UrlConnection JDK, клиент Apache's HTTP, асинхронный HTTP -клиент Netty и Spring's Resttemplate. Тем не менее, наиболее удобная и элегантная вещь для использования - притворяться.
Введение в симуляцию
Файн является декларативным, шаблонным клиентом HTTP. Используя Feign в Spring Cloud, мы можем достичь того же опыта кодирования, что и вызов локальных методов при запросе удаленных услуг с помощью HTTP. Разработчик не может полностью понять, что это удаленный метод, и не может быть видно, что это HTTP -запрос. например:
@AutowiredPrivate Advertgropremoteservice Service; // Удаленная служба public adbredgroupvo foo (Integer GroupId) {return service.findbygroupid (GroupId); // вызов удаленной службы через http} Разработчики могут завершить процесс отправки HTTP -запросов, декодирования HTTP возвращает и инкапсулирует их в объекты через service.findByGroupId() .
Определение притворства
Чтобы притворяться, чтобы узнать, какой адрес отправил запрос при вызове метода и какие параметры следует принимать для запроса, нам необходимо определить интерфейс:
@Feignclient (name = "ea") // [a] публичный интерфейс ardedgroupremoteservice {@requestmapping (value = "/group/{groupid}", method = requestmethod.get) // [b] Advertgroupvo findbygroupid (@pathvariable ("Groupid") integer adgroupid)/[C] @RequipeTelet ("GroupId") integer adgouroupid)/[C] @RequipeTelet ("GroupId")/ "/group/{GroupId}", method = requestMethod.put) void update (@pathvariable ("GroupId") Integer GroupId, @RequestParam ("GroupName") String GroupName)A: @feignClient используется для уведомления компонентов Feign для прокси интерфейса (не нужно писать реализацию интерфейса), и пользователь может непосредственно вводить его через @autowired.
B: @Requestmapping означает, что при вызове этого метода вам необходимо отправить запрос на получение /group/{groupId} .
C: @pathvariable имеет то же значение, что и соответствующая аннотация в Springmvc.
Когда приложение Spring Cloud будет запущено, Feign сканирует интерфейс, помеченный аннотацией @FeignClient, генерирует прокси и зарегистрирует его в пружине. При создании прокси -сервера Feign создаст объект Requettemplate для каждого метода интерфейса. Этот объект инкапсулирует всю информацию, необходимую для HTTP -запросов. Имя параметра запроса, метод запроса и другая информация определяются в этом процессе. Шаблон притворства отражена здесь.
В этом примере мы используем Feign в сочетании с Eureka и лентой ,@FeignClient(name = "ea") означает уведомление Feign для запроса Eureka для службы с именем EA при вызове этого метода интерфейса, чтобы получить URL -адрес службы.
Энкодер Фейна, декодер и Errorderecoder
Процесс Фейна сериализации объекта параметра метода в подписи метода на параметры запроса и его помещение в HTTP -запрос завершается Encoder (Encoder). Аналогичным образом, десериализация данных ответа HTTP в объекты Java выполняется декодером (декодером).
По умолчанию Feign будет преобразовать параметры, помеченные аннотацией @RequestParam в строки и добавит их в URL, и преобразовать параметры без аннотаций в JSON через Джексон, чтобы поместить их в тело запроса. Обратите внимание, что если метод в @RequetMaping указывает метод запроса в качестве поста, то все незамеченные параметры будут игнорированы, например:
ОБНОВЛЕНИЕ (@pathvairiable ("GroupD @RequestMapping (value ="/Group/{GroupID} ", method = requestMethod.get) voidВ настоящее время, поскольку запрос GET не имеет корпуса запроса, параметр OBJ будет игнорироваться.
В облачной среде Spring, Encoder Feign* будет использоваться только для кодирования параметров, которые не были добавлены в аннотацию. Если вы настраиваете энкодер, ваш энкодер будет вызван только при кодировании параметра OBJ. Для декодера делегаты по умолчанию в класс MappingJackson2httpmessageConverter в SpringMVC для декодирования. ErrordeCoder будет вызвана только тогда, когда код состояния не превышает 200 и 300. Функция ErrordeCoder состоит в том, чтобы вернуть исключение на основе информации о ответе HTTP, которая может быть поймана, где вызывается интерфейс Feign. В настоящее время мы используем ErrordeCoder, чтобы привлечь интерфейс Feign для обработки бизнес -исключения.
Feign's Http Client
По умолчанию Feign использует JDK Native UrlConnection для отправки HTTP -запросов. Там нет пула соединений, но для каждого адреса будет поддерживаться длинное соединение, то есть используется постоянное соединение HTTP. Мы можем заменить оригинального HTTP-клиента Feign на HTTP-клиент Apache, тем самым получая возможности управления, тесно связанные с производительностью, такими как пулы соединений, тайм-ауты и т. Д. Spring Cloud поддерживает эту замену с момента версии Brixtion.SR5, сначала заявляет об Apache HTTP-клиенте и feign-httpclient в проекте: в проекте.
<!-Замените Feign Native httpclient на Apache httpclient-> <DepeCtency> <groupId> org.apache.httpcomponents </GroupId> <ArtifactId> httpclient </artifactid> </artifactid> feigntpclied> feignfclifclifclifclix> feignfclifclix. <sersion> $ {feign-httpclient} </version> </dependency>Затем добавьте в приложение. Прозрачные:
feign.httpclient.enabled = true
Суммировать
Благодаря Feign, мы можем сделать HTTP -удаленные вызовы совершенно прозрачными для разработчиков и получить опыт кодирования в соответствии с вызовом локальных методов. Это похоже на то, как удаленные услуги выявляются в Alibaba Dubbo. Разница в том, что Дуббо основан на частном бинарном протоколе, в то время как Файн, по сути, является клиентом HTTP. Если вы используете Spring Cloud Netflix для построения микросервисов, то Feign, несомненно, является лучшим выбором.
Выше представлено метод (рекомендуется) для использования Spring Cloud Faine Fain в качестве клиента HTTP для вызова удаленных служб HTTP (рекомендуется). Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!