每天20分钟之feign

2022-07-24 13:51:56 浏览数 (1)

feign提供的功能

java支持的接口调用方式

  • httpclient
  • okhttp
  • httpURLConnection
  • RestTemplate

feign对各类http调用包进行了抽象,我们不必自己去调用http包,feign进行了封装

feign的使用

代码语言:txt复制
spring.application.name=eureka-client-front
server.port=7012

eureka.client.serviceUrl.defaultZone=http://tom:123456@localhost:6010/eureka/,http://tom:123456@localhost:6020/eureka/
eureka.instance.preferIpAddress=true
eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
eureka.client.healthcheck.enabled=true
eureka.instance.lease-expiration-duration-in-seconds=5
eureka.instance.lease-renewal-interval-in-seconds=15

eureka.instance.metadata-map.yuantiandi=tom

ribbon.eureka.enabled=true

logging.level.com.cxytiandi.feign_demo.remote.UserRemoteClient=DEBUG

feign.httpclient.enabled=false
feign.okhttp.enabled=true
feign.client.config.eureka-client-user.connect-timeout=1000
feign.client.config.eureka-client-user.readTimeout=1000




@FeignClient(value="eureka-client-user", configuration= FeignConfiguration.class)
public interface UserInfoClientApi {

    @GetMapping("/user/{uid}")
    public String info(@PathVariable long uid);
}


@Slf4j
public class FeignAuthInterceptor implements RequestInterceptor {

    public FeignAuthInterceptor() {

    }

    @Override
    public void apply(RequestTemplate template) {
        log.info("拦截器生效了");
    }
}
@Configuration
public class FeignConfiguration {
    /**
     * 日志级别
     *
     * @return
     */
    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }

    @Bean
    public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
        return new BasicAuthRequestInterceptor("tom", "123456");
    }

    @Bean
    public FeignAuthInterceptor feignBasicAuthRequestInterceptor() {
        return new FeignAuthInterceptor();
    }

}

直接使用openfeign

代码语言:txt复制
package cn.beckbi;

import feign.Param;
import feign.RequestLine;


public interface InfoApi {

    @RequestLine("GET /user/{uid}")
    String info(@Param(value = "uid") long uid);

}

@RestController
public class HiController {

    @GetMapping("/hi")
    public String hi() {
         InfoApi infoApi = HiController.getRestClient(InfoApi.class, "http://127.0.0.1:7010/");
         return infoApi.info(123456L);
    }

    public static <T> T getRestClient(Class<T> apiType, String url) {
        return Feign.builder().target(apiType, url);
    }

}

附录

实现的代码见:https://github.com/beckbikang/spring-cloud

0 人点赞