消费者访问生产者的三种远程调用方式

简介: 1.FeignClient接口,不能使用@GettingMapping之类的组合注解 2.FeignClient接口中,如果使用到@PathVariable必须指定其value 3.只要参数是复杂对象,即使指定了是GET方法,feign依然会以POST方法进行发送请求,同时生产者必须支持POST请求并给参数添加@RequestBody注解 建议使用公共vo+@RequestBody方式 4.springcloud中feign访问其他服务并传参数出现错误的问题:status 405 reading LogisticsOrderService#get
  1. 消费者访问生产者的三种远程调用方式
    RestTemplate/WebClient/Feign(默认开启负载均衡)
  2. 使用RestTemplate
    ·1.创建 RestTemplateConfig

    @Configuration
    public class RestTemplateConfig {
        @Bean
        @LoadBalanced  //开启负载均衡,轮询方式
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    } 
    

    2.在Controller看使用RestTemplateConfig访问生产者

    String result = restTemplate.getForObject("http://user-service/sys/user/load?username=xmm", String.class);
    
  3. 使用WebClient(略)

    HttpClient/HttpsClient

  4. 使用Feign(建议)
    1.导入依赖

    <!--feign远程调用-->
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-openfeign</artifactId>
     </dependency>
    

    2.编写Feign接口

@Service
@FeignClient("user-service")
public interface UserFeign {

@RequestMapping(value = "/sys/user/load2", method = RequestMethod.POST)
String load2(UserVo userVo);

}

3.启动类添加@EnableFeignClients注解
4.调用Feign接口进行远程访问(消费者-->生产者)

5.几个注意事项

 1.FeignClient接口,不能使用@GettingMapping之类的组合注解
 2.FeignClient接口中,如果使用到@PathVariable必须指定其value
 3.只要参数是复杂对象,即使指定了是GET方法,feign依然会以POST方法进行发送请求,同时生产者必须支持POST请求并给参数添加@RequestBody注解
    建议使用公共vo+@RequestBody方式
 4.springcloud中feign访问其他服务并传参数出现错误的问题:status 405 reading LogisticsOrderService#getLogistics(Integer,String,Integer,Integer)
    当使用feign传参数的时候,需要加上@RequestParam注解,否则对方服务无法识别参数;    
    @GetMapping("/order/getLogistics")
    public ResponseObj getLogistics(
       @RequestParam(value = "logisticsType") Integer logisticsType,
       @RequestParam(value="token") String token,
       @RequestParam(value = "currentPage", defaultValue = "1") Integer currentPage,
       @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize);

   
  1. Feign综合示例
    1~N个参数
    @RequestParam Long bookId
    1个复杂对象DTO
    生产者接受参数时要添加@RequestBody
    将DTO对象定义到公共模块

附录一:远程调用的相关注解
@PathVariable
@RequestParam
@RequestBody

@RequestMapping
注解RequestMapping中produces属性可以设置返回数据的类型以及编码,可以是json或者xml:
@RequestMapping(value="/xxx",produces = {"application/json;charset=UTF-8"})
@RequestMapping(value="/xxx",produces = {"application/xml;charset=UTF-8"})

附录二:深入理解DTO、PO的概念、区别和用处
DTO(Data Transfer Object):数据传输对象,可以多个
将UI数据-->后台
将后台数据-->前端

PO(Persistent Object):持久化对象

附录三:对象映射框架orika

相关文章
|
人工智能 缓存 NoSQL
【深度】企业 AI 落地实践(四):如何构建端到端的 AI 应用观测体系
本文探讨了AI应用在实际落地过程中面临的三大核心问题:如何高效使用AI模型、控制成本以及保障输出质量。文章详细分析了AI应用的典型架构,并提出通过全栈可观测体系实现从用户端到模型推理层的端到端监控与诊断。结合阿里云的实践经验,介绍了基于OpenTelemetry的Trace全链路追踪、关键性能指标(如TTFT、TPOT)采集、模型质量评估与MCP工具调用观测等技术手段,帮助企业在生产环境中实现AI应用的稳定、高效运行。同时,针对Dify等低代码平台的应用部署与优化提供了具体建议,助力企业构建可扩展、可观测的AI应用体系。
Web server failed to start. Port XXX was already in use.【完美解决方案】
Web server failed to start. Port XXX was already in use.【完美解决方案】
Web server failed to start. Port XXX was already in use.【完美解决方案】
|
11月前
|
Java 开发工具 Windows
IDEA启动报端口占用 The port may already be in use or the connector may be misconfigured
【10月更文挑战第8天】本文介绍了在使用IDEA开发工具时遇到的端口占用问题及其解决方法。首先尝试关闭IDEA和Java进程,若无效则通过命令行查询并结束占用端口的进程,以确保项目顺利启动。
|
编译器 C# Windows
C#基础:手动编译一个.cs源代码文件并生成.exe可执行文件
通过上述步骤,应该能够高效准确地编译C#源代码并生成相应的可执行文件。此外,这一过程强调了对命令行编译器的理解,这在调试和自动化编译流程中是非常重要的。
956 2
|
机器学习/深度学习 存储 自然语言处理
使用Python实现深度学习模型:语言翻译与多语种处理
【7月更文挑战第21天】 使用Python实现深度学习模型:语言翻译与多语种处理
523 0
|
JSON 数据格式
糊涂工具类(hutool)post请求设置body参数为json数据
糊涂工具类(hutool)post请求设置body参数为json数据
|
Java 数据库连接 API
Springboot实现优雅的参数校验(Spring Validation)和 if else说再见
Springboot实现优雅的参数校验(Spring Validation)和 if else说再见
544 0
|
监控 Java
Zabbix【部署 02】Zabbix-Java-Gateway安装配置使用(使用Zabbix-Java-Gateway通过JMX监控Java应用程序实例分享)
Zabbix【部署 02】Zabbix-Java-Gateway安装配置使用(使用Zabbix-Java-Gateway通过JMX监控Java应用程序实例分享)
700 0
|
监控 Java 开发工具
SpringCloud极简入门-配置中心Spring Cloud Config
在分布式系统中,由于服务数量很多,为了方便服务配置文件统一管理我们需要用到置中心组件。在Spring Cloud中,分布式配置中心组件spring cloud config 它可以帮我们集中管理配置文件,修改配置无需重启服务 等,它支持配置文件放在配置服务的本地,也支持放在远程如Git仓库中集中管理。在spring cloud config 分为了服务端 config server和客户端config client 两个角色。
1031 0

热门文章

最新文章