Feign使用方法

Feign使用方法什么是 FeignFeign 是微服务架构中的一种服务调用方式 通过声明方式进行微服务调用 Feign 可以帮助我们更加便捷编写接口 Feign 的使用由三个部分组成 服务提供者 服务消费者 Feign 客户端服务提供者 服务接口 接口定义需要加上 RequestMappi 注解 publicinterf

什么是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,但是默认关闭,毕竟如果都开启的话,那对性能消耗很大

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211870.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午9:24
下一篇 2026年3月18日 下午9:24


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号