【SpringCloud】(九):Feign的自定义配置

来源:互联网 发布:科学大众网络比赛 编辑:程序博客网 时间:2024/05/17 23:50

  上篇文章介绍了Feign以及它的基本使用,下面我们来完成Feign的定义配置,可以类比Ribbon的自定义的配置方式;



  配置中也存在@Configuration和@ComponentScan冲突,不要把Configuration的类配置在@ComponentScan能扫描的路径


根据文档内容来自定义Feign;

1.启动类

package com.dynamic.cloud;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;import org.springframework.cloud.netflix.feign.EnableFeignClients;@SpringBootApplication@EnableEurekaClient@EnableFeignClientspublic class ComsumerMovieFeignApplication {public static void main(String[] args) {SpringApplication.run(ComsumerMovieFeignApplication.class, args);}}

2.Controller

package com.dynamic.cloud.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;import com.dynamic.cloud.entity.User;import com.dynamic.cloud.feign.FeignClient2;import com.dynamic.cloud.feign.UserFeignClient;@RestControllerpublic class MovieController {@Autowiredprivate UserFeignClient userFeignClient;@Autowiredprivate FeignClient2 feignClient2;@GetMapping("/movie/{id}")public User findById(@PathVariable Long id){return this.userFeignClient.findById(id);}@GetMapping("/{serviceName}")public String findServiceInfoFromEurekaByServiceName(@PathVariable("serviceName")String serviceName){return this.feignClient2.findServiceInfoFromEurekaByServiceName(serviceName);}}

Controller中注入了两个FeignClient ,分别配置不同的@Configuration。

一个是UserFeignClient:调用用户微服务。

一个是FeignClient2:通过传入用户微服务的ServicId 从Eureka中获取信息。


UserFeignClient

package com.dynamic.cloud.feign;import org.springframework.cloud.netflix.feign.FeignClient;import com.dynamic.cloud.entity.User;import com.dynamic.config.FooConfiguration;import feign.Param;import feign.RequestLine;@FeignClient(name="microservice-provider-user",configuration = FooConfiguration.class)public interface UserFeignClient {@RequestLine("GET /simple/{id}") public User findById(@Param("id") Long id); }

配置类:FooConfiguration

package com.dynamic.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import feign.Contract;import feign.Logger;@Configurationpublic class FooConfiguration {    @Bean    public Contract feignContract() {        return new feign.Contract.Default();    }    @Bean    Logger.Level feignLoggerLevel() {        return Logger.Level.FULL;    }}

 Logger.Level.FULL设置打印日志的级别


FeignClient2

package com.dynamic.cloud.feign;import org.springframework.cloud.netflix.feign.FeignClient;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import com.dynamic.config.AuthConfiguration;@FeignClient(name="xxx",url="http://localhost:8761/",configuration=AuthConfiguration.class)public interface FeignClient2 {@RequestMapping(value="/eureka/apps/{serviceName}")public String findServiceInfoFromEurekaByServiceName(@PathVariable("serviceName") String serviceName);}

配置类:AuthConfiguration

设置 Eureka Server的访问的用户名和密码

package com.dynamic.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import feign.auth.BasicAuthRequestInterceptor;@Configurationpublic class AuthConfiguration {    @Bean    public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {        return new BasicAuthRequestInterceptor("user","pass123");    }}