1,什么是Feign:
Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单,它的使用方法就是定义一个接口,然后在上面添加注解@FeignClient
2,springCloud服务集成Fegin
第一步:
引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
第二步:
编写调用其他服务的接口
@FeignClient(value = "ZT-FRANK-CONFIG-SERVICE")//这里是被调用服务yml文件的spring.application.name值
/**
* 一下两种是通过ip的方式来调用服务
*/
//@FeignClient(name = "zt-frank-config-service",url = "http://localhost:7003")
//@FeignClient(value = "zt-frank-config-service",url = "http://localhost:7003")
public interface FeignRibbonRuleTestService {
@RequestMapping(value = "/config/health",method = RequestMethod.POST)
String feginRibbomRuleTest();
}
第三步:
主启动类上加上@EnableFeignClients注解包扫描到添加@FeignClient注解的那一层
@SpringBootApplication
@EnableEurekaClient
/**
* 开启Feign调用接口的方式
*/
@EnableFeignClients(basePackages = {"com.zt.frank.consumerservice.service"})
public class ZtFrankConsumerFeignServiceApplication8002 {
private static Logger logger = Logger.getLogger(ZtFrankConsumerFeignServiceApplication8002.class);
public static void main(String[] args) {
SpringApplication.run(ZtFrankConsumerFeignServiceApplication8002.class, args);
logger.info("*********ZtFrankConsumerFeignServiceApplication8002启动成功*********");
}
}
第五步:
测试。。。 报错!
java.lang.NoClassDefFoundError: com/google/common/reflect/TypeToken
网上搜了下 https://blog.csdn.net/u010529525/article/details/89957124
添加一个依赖就好了
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
再次启动项目,调用就可以了。。。问题解决!经过多次测试貌似只有第一次使用feign才会报这个错,加上该依赖然后通过feign实现项目之间的通信之后,将该依赖去除也是可以的,不知道是不是缓存的原因,算了不就结了。。。