前言
当一个接口在别的微服务的时候,刚好你想用这个端口,怎么办?是不是要将想要的微服务的依赖给放到这个要调用的微服中?这是不是有点麻烦了?所以,feign刚好可以解决这个问题
开搞
Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。
在Spring Cloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。
Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。
Spring Cloud Feign是基于Netflix feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供这两者的强大功能外,还提供了一种声明式的Web服务客户端定义的方式。
Spring Cloud Feign帮助我们定义和实现依赖服务接口的定义。在Spring Cloud feign的实现下,只需要创建一个接口并用注解方式配置它,即可完成服务提供方的接口绑定,简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。
Spring Cloud Feign具备可插拔的注解支持,支持Feign注解、JAX-RS注解和Spring MVC的注解。
1.在现有的springboot项目中创建一个feign微服务,并且用的是maven创建的
2.添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
3.修改application.yml
eureka:
instance:
prefer-ip-address: true
client:
service-url:
defaultZone: http://127.0.0.1:9000/eureka/
feign:
hystrix:
enabled: true
4.修改启动类
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = {"org.lyf.feign.client"}) //想要远程访问的接口的类属包名
@EnableDiscoveryClient
public class FeignApplication {
public static void main(String[] args) {
SpringApplication.run(FeignApplication.class);
}
}
5.org.lyf.feign.client
接口包中添加UserClient
类
@FeignClient(value = "user", fallback = UserClientImpl.class)//微服务名和熔断器类
public interface UserClient {
@GetMapping("/user/findAll") //把接口名写全
Result findAll();
}
6.同级目录下写熔断器
@Component
public class UserClientImpl implements UserClient {
@Override
public Result findAll() {
return new Result(false, StatusCode.ERROR,"远程调用出现了问题,触发了熔断器");
}
}
7.写控制类
@RestController
@RequestMapping("/feign")
public class UserFeign {
private static final Logger LOG = LoggerFactory.getLogger(UserFeign.class);
@Resource
private UserClient userClient;
@GetMapping("/findAll")
public Result findAll() {
LOG.info("/feign/findAll");
return userClient.findAll();
}
}
8.访问localhost:9002/feign/findAll
网友评论