今天小编给大家分享一下Java微服务间接口调用feign的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
Feign说明
Feign是一种声明式、模板化的HTTP客户端。在spring cloud中使用Feign,可以做到类似于普通的接口的请求调用,可以发现对应的服务的接口,进而直接调用对应服务中的接口。
引入依赖,启动类开启客户端
首先需要在各个微服务中引入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
然后在启动类中加入注解@EnableFeignClients ,开启Feign客户端。
在各自的启动类中添加注释:
@EnableDiscoveryClient 和 @EnableFeignClients ,并在配置文件中添加各自的服务名,以及配置Nacos的服务地址
//服务A的启动类 @EnableDiscoveryClient //nacos注册 @EnableFeignClients //Feign 服务调用 @SpringBootApplication public class ApplicationA { public static void main(String[] args){ SpringApplication.run(ApplicationA.class,args); } } //服务B的启动类 @EnableDiscoveryClient //nacos注册 @EnableFeignClients //Feign 服务调用 @SpringBootApplication public class ApplicationB { public static void main(String[] args){ SpringApplication.run(ApplicationB.class,args); } }
application.properties
服务A配置 # 服务端口 server.port=8001 # 服务名 spring.application.name=serviceA # nacos服务地址 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 --------------------------服务B配置------------------------------- # 服务端口 server.port=8003 # 服务名 spring.application.name=serviceB # nacos服务地址 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
3.在微服务A中创建client包和接口
然后在当前服务内编写Feign接口,接口与普通的controller层类似,只是在类上不需要写@Controller等注解,只需要加上@Component 、 @FeignClient注解即可,下面的请求方法需要写上请求方式(根据提供服务的接口适配)@PostMapping(“/findList”)注解。如下:
@Component @FeignClient(value = "sso", path = "/api/user", fallback = UserClientHystrix.class)//value是需要调用的服务名称,path是sso服务内的请求路径 //value必选是服务名(就是yaml中server.name) //path是前缀(就是yaml中server.contentPath) //fallback是服务熔断的类 public interface UserClient { /** * 获取对象集合 * @param object * @return */ @PostMapping("/findList")//根据服务适配添加注解 Result<UserDO> findList(@CustomJSONBody Object object); } //@FeignClient注解用于指定从哪个服务中调用功能 ,名称与被调用的服务名保持一致。
在微服务A中创建client包和接口
@Component @FeignClient("serviceB") public interface ServiceBClient { @PostMapping("serviceB/test") public Result test(@RequestParam String args); }
注意微服务A(调用者)中ServiceBClient接口中编写的是微服务B中被调用的接口,参数类型方法名要一致。以下时微服务B中被调用的接口(Controller)
服务B中接口的示例 @RestController @RequestMapping("serviceB") @CrossOrigin public class VodController { @PostMapping("test") public void test(@RequestParam String args){ System.out.println(args); } }
4.在微服务A中调用服务B的接口
方法总结
在微服务A中调用服务B中的接口
1.初始化操作:添加依赖,配置等等。
2.创建Client接口,使用@GetMapping注解对被调用的微服务进行地址映射。
3.在微服务A中调用Client接口中的方法。
注:① 接口层添加注解@FeignClient,并在注解中指明属性value="服务提供方的实例名";
② 在方法上添加映射的URL要与服务提供方接口的URL一致。