使用FeignClient进行微服务交互方式(微服务接口互相调用)

 更新时间:2022年03月07日 10:06:20   作者:古木2019  
这篇文章主要介绍了使用FeignClient进行微服务交互方式(微服务接口互相调用),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用FeignClient进行微服务交互

先写一个公共方法

  public String getSettingValue(String name) {
       Map<String, Object> map = (Map) settingClient.getByName(name).getData();
       return (String) map.get("value");
  }

然后写一个Feign调用

@FeignClient(value="qiang-admin")
public interface SettingClient {
    @RequestMapping(value="/setting/getSetting/{name}",method = RequestMethod.GET)
    public ReturnMsg getByName(@PathVariable("name") String name);
}

@FeignClient注解用于指定从哪个服务中调用功能 ,注意 里面的名称与被调用的服务

名保持一致,并且不能包含下划线。

@RequestMapping注解用于对被调用的微服务进行地址映射。注意 @PathVariable注

解一定要指定参数名称,否则出错。

@PathVariable:接口参数

被Feign调用的方法如下

    @RequestMapping(value="/getSetting/{name}",method = RequestMethod.GET)
    public ReturnMsg getByName(@PathVariable String name){
        Setting condition = new Setting();
        condition.setName(name);
        ReturnMsg returnMsg = new ReturnMsg<>();
        Setting setting = settingService.findByCondition(condition);
        returnMsg.setCode(ReturnIntCode.SUCCESSS_CODE);
        returnMsg.setData(setting);
        return returnMsg;
    }

@FeignClient调用微服务注意事项

在初次使用springcloud,调用微服务的时候,常常会踩坑,这里总结一下,在调用微服务的时候,常犯的几点错误及注意点:

FeignClient接口不能使用@GettingMapping之类的组合注解

@FeignClient("target-servername")
  public interface FeignClient {
       @RequestMapping(value = "/simple/{id}", method =RequestMethod.GET)
 public Object findById(@PathVariable("id") Long id);
 ...
}

这边的@RequestMapping(value = "/simple/{id}", method = RequestMethod.GET) 不能写成@GetMapping("/simple/{id}") 。因为GetMapper是一个组合注解。

FeignClient接口中如果使用到@PathVariable

必须指定其value

@FeignClient("target-servername")
public interface FeignClient {
 @RequestMapping(value = "/simple/{id}", method = RequestMethod.GET)
 public Object findById(@PathVariable("id") Long id);
 ...
}

这边的@PathVariable("id") 中的”id”,不能省略,必须指定。

FeignClient多参数的构造

如果想要请求target-servername 服务,并且参数有多个例如:http://target-servername/query-by?id=1&username=张三 要怎么办呢? 不能构造一个复杂的对象去接收,必须一个一个接收参数

@FeignClient("target-servername")
public interface UserFeignClient {
 @RequestMapping(value = "/query-by", method = RequestMethod.GET)
 public Object queryBy(@RequestParam("id")Long id, @RequestParam("username")String username);
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java之springcloud Sentinel案例讲解

    Java之springcloud Sentinel案例讲解

    这篇文章主要介绍了Java之springcloud Sentinel案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 解析Spring RestTemplate必须搭配MultiValueMap的理由

    解析Spring RestTemplate必须搭配MultiValueMap的理由

    本文给大家介绍Spring RestTemplate必须搭配MultiValueMap的理由,本文通过实例图文相结合给大家介绍的非常详细,需要的朋友参考下吧
    2021-11-11
  • java后台调用接口及处理跨域问题的解决

    java后台调用接口及处理跨域问题的解决

    这篇文章主要介绍了java后台调用接口,处理跨域的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Mybatis-plus查询语句加括号(.or(),.and())问题

    Mybatis-plus查询语句加括号(.or(),.and())问题

    这篇文章主要介绍了Mybatis-plus查询语句加括号(.or(),.and())问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • SpringBoot实现初始化的三种策略模式

    SpringBoot实现初始化的三种策略模式

    本文主要介绍了SpringBoot实现初始化的三种策略模式,包括默认初始化策略、懒加载初始化策略和自定义初始化策略,具有一定的参考价值,感兴趣的可以了解一下
    2024-12-12
  • java日期时间操作工具类

    java日期时间操作工具类

    这篇文章主要为大家详细介绍了java日期时间操作工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • 深入分析Spring BeanDefinition的构造元信息

    深入分析Spring BeanDefinition的构造元信息

    Bean Definition是一个包含Bean元数据的对象,它描述了如何创建Bean实例、Bean属性的值以及Bean之间的依赖关系,本文将带大家深入分析Spring BeanDefinition的构造元信息,需要的朋友可以参考下
    2024-01-01
  • 一篇文章让你学会Java的输入与输出

    一篇文章让你学会Java的输入与输出

    这篇文章主要介绍了Java输入与输出的相关资料,包括使用System.out.println()、System.out.printf()和System.out.print()进行输出,以及使用Scanner类和System.in.read()方法进行输入,需要的朋友可以参考下
    2025-03-03
  • Java并发编程之StampedLock锁介绍

    Java并发编程之StampedLock锁介绍

    这篇文章主要介绍了Java并发编程之StampedLock锁,StampedLock是并发包里面JDK8版本新增的一个锁,下文更多相关内容需要的小伙伴可以参考一下
    2022-04-04
  • 深入聊一聊JDK中的Map和Set

    深入聊一聊JDK中的Map和Set

    这篇文章主要给大家介绍了关于JDK中Map和Set的相关资料,文中通过示例代码以及图文介绍的非常详细,对大家学习或者使用jdk具有一定的参考学习价值,需要的朋友可以参考下
    2022-12-12

最新评论