Maison >Java >javaDidacticiel >Notes d'étude Spring Cloud2.0 Pratique de Feign
springCloud:Finchley.RELEASE
Feign est un client Rest déclaratif dans le système Spring Cloud. Il peut réaliser l'invocation de services Restful grâce à une configuration simple, la création d'interfaces et d'annotations. Et il commence à prendre en charge SpringMvc.
Dépendance : org.springframework.cloud:spring-cloud-starter-openfeign
Ajouter @ à l'entrée EnableFeignClients annotation
Créez l'interface correspondante et ajoutez une annotation
//入口类 @SpringBootApplication @EnableFeignClientspublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } //原型接口声明 @FeignClient("stores")public interface StoreClient { @RequestMapping(method = RequestMethod.GET, value = "/stores") List<Store> getStores(); @RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes = "application/json") Store update(@PathVariable("storeId") Long storeId, Store store); }
feign.hystrix.enabled=true
# To disable Hystrix in Feignfeign: hystrix: enabled: true# To set thread isolation to SEMAPHORE# 将断路器隔离级别由默认的线程隔离调整为信号灯hystrix: command: default: execution: isolation: strategy: SEMAPHORE
Le disjoncteur prend en charge le repli, c'est-à-dire lorsque le circuit Le disjoncteur est activé ou une erreur d'interface se produit. La méthode définie par le rappel est exécutée et le résultat prédéfini est renvoyé. Pour activer la prise en charge du rappel, il vous suffit de configurer le paramètre de repli dans l'annotation @FeignClient pour qu'il soit la classe d'implémentation de rappel de l'interface, et la classe d'implémentation de rappel doit être annotée en tant que Spring Bean (peut être implémentée via @Component, @Service et d'autres annotations, voir la documentation des annotations de Spring 4 pour plus de détails).
@FeignClient(name = "hello", fallback = HystrixClientFallback.class) protected interface HystrixClient { @RequestMapping(method = RequestMethod.GET, value = "/hello") Hello iFailSometimes(); } @Componentstatic class HystrixClientFallback implements HystrixClient { @Override public Hello iFailSometimes() { return new Hello("fallback"); } }
Si vous avez besoin de connaître la raison de la restauration, vous pouvez utiliser la rollback factory. L'exemple de code est le suivant :
@FeignClient(name = "hello", fallbackFactory = HystrixClientFallbackFactory.class) protected interface HystrixClient { @RequestMapping(method = RequestMethod.GET, value = "/hello") Hello iFailSometimes(); } @Componentstatic class HystrixClientFallbackFactory implements FallbackFactory<HystrixClient> { @Override public HystrixClient create(Throwable cause) { return new HystrixClient() { @Override public Hello iFailSometimes() { return new Hello("fallback; reason was: " + cause.getMessage()); } }; } }
Feign prend en charge l'héritage d'interface De cette façon, les opérations sont formées via l'interface pour former un contrat.
//生产者的控制层接口public interface UserService { @RequestMapping(method = RequestMethod.GET, value ="/users/{id}") User getUser(@PathVariable("id") long id); } //生产者的控制器实现 @RestController public class UserResource implements UserService {} //消费端的Feign接口定义 package project.user; @FeignClient("users") public interface UserClient extends UserService {}
L'activation de la compression peut effectivement économiser les ressources du réseau, mais cela augmentera la pression du processeur. Il est recommandé d'augmenter la taille minimale du fichier compressé de manière appropriée
//开启压缩 feign.compression.request.enabled=true feign.compression.response.enabled=true //配置压缩文档类型及最小压缩的文档大小 feign.compression.request.mime-types=text/xml,application/xml,application/json feign.compression.request.min-request-size=2048<.>Configuration du journal
# 日志支持logging.level.project.user.UserClient: DEBUG
@Configurationpublic class FooConfiguration { @Bean Logger.Level feignLoggerLevel() { return Logger.Level.FULL; } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!