微服务之OpenFeigin

在我们工程中怎么添加Feign

定义一个03-ms-alibaba-feign-api工程

  • ①:第一步,引入依赖
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring‐cloud‐starter‐openfeign</artifactId>
</dependency>
  • ②:第二步:修改打包方式(因为该工程式一个普通的jar 不需要打可执行的jar)
<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
  • 第三步:编写声明式接口
@FeignClient(name = "product-center", configuration = ProductCenterFeignConfig.class)
//@FeignClient(name = "product-center")
public interface ProductCenterFeignApi {
	/**
	 * 声明式接口,远程调用http://product-center/selectProductInfoById/{productNo}
	 * @param productNo
	 * @return
	 */
	@
	RequestMapping("/selectProductInfoById/{productNo}")
	ProductInfo selectProductInfoById(@PathVariable("productNo") String productNo);
	
	@
	RequestMapping("/getToken4Header")
	String getToken4Header();
}

调用者工程03-ms-alibaba-feign-order

  • 第一步:引入依赖包 03-ms-alibaba-feign-api
<dependency>
	<groupId>com.tuling</groupId>
	<artifactId>03-ms-alibaba-feign-api</artifactId>
	<version>0.0.1-SNAPSHOT</version>
</dependency>
  • 第二步: 开启注解加入 @EnableFeignClients
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class 03MsAlibabaFeignOrderApplication {

	public static void main(String[] args) {
		SpringApplication.run(03MsAlibabaFeignOrderApplication.class, args);
	}
}

  • 第三步:调用方式(像调用本地方式一样调用远程服务)
@Autowired
private ProductCenterFeignApi productCenterFeignApi;

ProductInfo productInfo = productCenterFeignApi.selectProductInfoById(orderNo);

如何自定义Feign

  • 默认情况下,Feign的调用式不打印日志,我们需要通过自定义来打印我们的Feign的日志 (basic适 用于生产环境)
    在这里插入图片描述

我们在03-ms-alibaba-feign-api工程中添加Feign的自定义配置

/**
 * 这个类上千万不要添加@Configuration,不然会被作为全局配置文件共享
 * Created by smlz on 2019/11/22.
 */
public class ProductCenterFeignConfig {

    @Bean
    public Logger.Level level() {
        //return Logger.Level.FULL;
        //return Logger.Level.HEADERS;
        return Logger.Level.BASIC;
        //return Logger.Level.NONE;
    }

    /**
     * 根据SpringBoot自动装配FeignClientsConfiguration 的FeignClient的契约是SpringMvc
     *
     通过修改契约为默认的Feign的锲约,那么就可以使用默认的注解
     * @return
     */

	/*@Bean
    public Contract feiContract() {
        return new Contract.Default();
    }*/

    @Bean
    public RequestInterceptor requestInterceptor() {
        return new RequestInterceptor();
    }

}

②:针对调用端工程03-ms-alibaba-customcfg-feign-order针对日志com.tuling.feignapi 包下的日志级 别必须调整为DEBUG级别的 不然是不会打印日志的

logging:
  level:
    com:
      tuling:
        feignapi: debug

拦截器的应用配置

// 拦截器类
public class TulingRequestInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate template) {

        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        template.header("Token",request.getHeader("Token"));
    }
}
//feign自定义配置中配置
public class ProductCenterFeignConfig {
    @Bean
    public RequestInterceptor requestInterceptor() {
        return new RequestInterceptor();
    }
} 
// 接口定义
@FeignClient(name = "product-center",configuration = ProductCenterFeignConfig.class)
public interface ProductCenterFeignApi {
    @RequestMapping("/getToken4Header")
    String getToken4Header(@RequestHeader("token") String token);
}

服务提供者

@RestController
@Slf4j
public class ProductInfoController{

    @Autowired
    private ProductInfoMapper productInfoMapper;

    @RequestMapping("/getToken4Header")
    public String getToken4Header(@RequestHeader("Token") String token)  {
        log.info("token:{}",token);
        return token;
    }

Feign调用优化方案

feign:
  client:
    config:
      product‐center:
        loggerLevel: full
        httpclient:
          #让feign底层使用HttpClient去调用
          enabled: true
          max‐connections: 200 #最大连接数
          max‐connections‐per‐route: 50 #为每个url请求设置最大连接数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值