OpenFeign的三种远程调用方式

分别是通过服务名、写死url,动态传入URL、进行远程调用

1.前期准备工作

  1. a. pom.xml文件添加依赖,要用到nacos、springBoot、openfeign。
  2. b.消费者和服务提供者。
  3. @FeignClient中name和value等效, name/value属性: 这两个的作用是一样的,指定的是调用服务的微服务名称。
  4. @SpringQueryMap 这是spring cloud新增的一个注解, @SpringQueryMap
    可以用来修饰pojo类,达到使用对象传递参数的需求,当使用@GetMapping传对象的时候使用。

2.构建feign接口

  1. a.通过name/value(注册到nacos的服务名)找到对应服务提供者进行调用,
@FeignClient(name = "pratice-test") 
public interface FeignTest{
@GetMapping(value = "/feign/upload",produces = "application/json; charset=utf-8")
Result uploadVideoAuth(@SpringQueryMap RequestVideoAuth requestVideoAuth);
}
  1. b. 通过url = “http://practice-test-portal.apps.com”
    ,固定写死调用的url找到服务提供者进行调用。 url : 指定调用服务的全路径,经常用于本地测试
@FeignClient(url ="http://practice-test-portal.apps.com") 
public interface FeignTest{
@PostMapping(value = "/feign/insert",produces = "application/json; charset=utf-8")
Result uploadVideoAuth(@RequestBody RequestVideoAuth requestVideoAuth);
}

若出现了@FeignClient(name = “pratice-test”,url =“http://practice-test-portal.apps.com”) name和url同时存在,如上情况:同时指定name和url属性: 则以url属性为准,name属性指定的值便当做客户端的名称。

  1. c.若调用的服务想动态配置,如在代码中配置,或在yaml文件中配置,url处可以写个url = “EMPTY”

  2. 在构建feign接口的时候要导入包 import java.net.URI;

@FeignClient(url = "EMPTY", name = "pratice-test")
   @PostMapping(value = "/_search", headers = {"content-type=application/json"})
   JSONObject search(URI dynamicUrl, @RequestHeader("token") String token,);
}
  1. 在实现类调用处要导入包 import java.net.URI;

  2. 然后new URI(url),

String url = "http://practice-test-portal.apps.com" 
或
 yaml中 配置了url 用@value("${feign.url}")的方式注入
 以上两条的url可以动态定义,传入下方new URI(url)
result = service.search(new URI(url), token);

总结:通过服务名、写死url,动态传入URL三种方式进行远程调用

你可能感兴趣的:(Java,java,spring,开发语言)