声明式的web服务客户端。使用接口加注解的形式编程。它是对RestTemplate和ribbon做了进一步封装。
Feign已经停更,OpenFeign是在Feign的基础上又做了进一步的封装。
Feign:
OpenFeign:
引入必要的jar包
org.springframework.cloud
spring-cloud-starter-openfeign
使用@EnableFeignClients注解,使当前微服务具有openfeign的功能。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableFeignClients
public class OrderOpenFeignMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderOpenFeignMain80.class, args);
}
}
使用@FeignClient(value = “CLOUD-PAYMENT-SERVICE”)注解指定调用的微服务名称。
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import com.gzq.springcloud.hoxton.entities.CommonResult;
import com.gzq.springcloud.hoxton.entities.Payment;
@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {
@GetMapping(value = "/payment/get/{id}")
public CommonResult getPaymentById(@PathVariable("id") Long id) ;
}
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.gzq.springcloud.hoxtom.service.PaymentFeignService;
import com.gzq.springcloud.hoxton.entities.CommonResult;
import com.gzq.springcloud.hoxton.entities.Payment;
@RestController
public class OrderFeignController {
@Resource
private PaymentFeignService feignService;
@RequestMapping(value="openfeign/consumer/payment/get/{id}")
public CommonResult getPaymentId(@PathVariable Long id){
return feignService.getPaymentById(id);
}
}
配置application.yml文件中ribbon的ConnectTimeout和ReadTimeout属性即可,默认情况下OpenFeign的超时时间是1秒。
#设置feign客户端超时时间(OpenFeign默认支持ribbon)
ribbon:
#指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
ConnectTimeout: 4000
#指的是建立连接后从服务器读取到可用资源所用的时间
ReadTimeout: 3100
logging:
level:
# feign日志以什么级别监控哪个接口
com.gzq.springcloud.hoxtom.service.PaymentFeignService: debug
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class OpenFeignConfig {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}