验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

Java微服务间接口调用feign的方法是什么

阅读:779 来源:乙速云 作者:代码code

Java微服务间接口调用feign的方法是什么

      Feign说明

      Feign是一种声明式、模板化的HTTP客户端。在spring cloud中使用Feign,可以做到类似于普通的接口的请求调用,可以发现对应的服务的接口,进而直接调用对应服务中的接口。

      引入依赖,启动类开启客户端

      首先需要在各个微服务中引入依赖

      
          org.springframework.cloud
          spring-cloud-starter-openfeign
      

      然后在启动类中加入注解@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 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一致。

    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>