Maison >Java >javaDidacticiel >Notes d'étude Spring Cloud2.0 Pratique de Feign

Notes d'étude Spring Cloud2.0 Pratique de Feign

无忌哥哥
无忌哥哥original
2018-07-20 12:02:453413parcourir

Contexte

  • springCloud:Finchley.RELEASE

Introduction

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.

Application simple

  • 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);
}

Activez le disjoncteur Feign et la prise en charge du contexte

  • 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

Rappel du disjoncteur

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

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 {}

Prise en charge de la compression

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

  • Le package où se trouve l'interface du service consommateur doit être debug

# 日志支持logging.level.project.user.UserClient: DEBUG
  • Définir la classe de configuration personnalisée, définir le niveau de journalisation

@Configurationpublic class FooConfiguration {
    @Bean
    Logger.Level feignLoggerLevel() {        
        return Logger.Level.FULL;
    }
}
  • Niveau de journalisation


    • AUCUN, aucune journalisation (DEFAULT).

    • BASIC, enregistre uniquement la méthode et l'URL de la demande, ainsi que le code d'état de la réponse et l'heure d'exécution.

    • HEADERS, enregistre les informations de base ainsi que les en-têtes de demande et de réponse.

    • FULL, enregistre les en-têtes, le corps et les métadonnées pour les demandes et les réponses.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn