Feign使用方法
什么是FeignFeign是微服务架构中的一种服务调用方式,通过声明方式进行微服务调用,Feign可以帮助我们更加便捷编写接口。Feign的使用由三个部分组成:服务提供者,服务消费者,Feign客户端服务提供者:服务接口,接口定义需要加上@RequestMapping注解public interface IFeignService {...
什么是Feign
Feign是微服务架构中的一种服务调用方式,通过声明方式进行微服务调用,Feign可以帮助我们更加便捷编写接口。
Feign的使用
由三个部分组成:服务提供者,服务消费者,Feign客户端
服务提供者:
服务接口,接口定义需要加上@RequestMapping注解
public interface IFeignService {
@RequestMapping("/getMember")
String getMember();
}
服务的具体实现,因为微服务是RPC远程调用,客户端是通过http方式进行调用的,所以实现累要加上@RestController暴露出来,跟controller写法一样
@RestController
public class FeignServiceImpl implements IFeignService{
@Override
@RequestMapping("/getMember")
public String getMember() {
return "i am member";
}
}
服务启动类,加上@EnableFeignClients表示开启Feign功能
@SpringBootApplication
@EnableFeignClients
@EnableEurekaClient
public class ClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class,args);
}
}
Feign客户端
Feign客户端实际上就是一个接口,但是这个接口继承了服务提供者的接口,通过@FeignClient注解声明需要调用的服务别名,由于是继承了提供者的接口,这里就不需要将getMember重新定义,减少了重复代码
@FeignClient(name = "eureka-client")
public interface IFeignClient extends IFeignService{
}
服务消费者
服务接口,定义消费者服务的接口,同样要加上RequestMapping(因为同样是服务,也有可能被其他服务调用)
public interface ICustomerService {
@RequestMapping("/toGetMember")
String toGetMember();
}
服务实现类,与提供者的实现累类似的,需要加上@RestController暴露出来,但这里是通过Feign调用提供者的服务,所以要创建Feign客户端实例,通过该实例进行调用。
这里注意一个坑,因为通过IFeignClient调用的时候实际上最终是调用到FeignServiceImpl实现类的方法,所以CustomerServiceImpl和FeignServiceImpl的RequestMapping不能有重复,否则启动的时候会存在两个相同的RequestMapping而导致路径匹配冲突而无法启动。
@RestController
public class CustomerServiceImpl implements ICustomerService{
@Autowired
IFeignClient iFeignClient;
@Override
@RequestMapping("/toGetMember")
public String toGetMember() {
return iFeignClient.getMember();
}
}
启动类,同样加上EnableFeignClients
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class FeignClientApplication {
public static void main(String[] args){
SpringApplication.run(FeignClientApplication.class,args);
}
}
如何传参
上面的是无参形式的服务调用,有参数的话跟我们平时发送web请求类似的,通过@RequestParam和@RequestBody注解传参,不同的是,这里的注解需要是接口和实现类都需要加上
使用Feign的好处
1.接口编写更加便捷。使用RestTemplate调用接口需要将url拼好进行调用,而Feign客户端只需要声明调用的服务id,不需要人工去拼接,无论是哪里需要调用直接调用客户端即可。
2.Feign内置ribbon负载均衡,如果是使用RestTemplate则需要通过@LoadBalanced注解开启
3.Feign内置Hystrix,但是默认关闭,毕竟如果都开启的话,那对性能消耗很大
更多推荐
所有评论(0)