SpringCloud声明式Feign客户端调用工具使用

 更新时间:2023年08月01日 10:11:46   作者:isWulongbo  
这篇文章主要为大家介绍了SpringCloud声明式Feign客户端调用工具使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

springcloud 支持两种客户端调用工具:

  • RestTemplate,基本上不使用
  • Feign,采用接口加注解方式,可读性较强

注:本來打算继续使用 consul 作为注册中心来进行 Feign 客户端调用的,provide 配置如下,无奈一直调用不到 注册上来的服务名,只好改用 Eureka 来使用,如有知道原因请指教!

##服务端口号
server:
  port: 8501
spring:
  application:
    ##服务别名--服务注册到consul名称
 name: consul-member
  ##注册中心consul地址
 cloud:
    consul:
      host: localhost
      port: 8500
 discovery:
        service-name: ${spring.application.name} # 服务提供名称
#        ## consul ip地址
#        hostname: 192.168.3.91

Eureka Feign客户端调用

这里我们基于 SpringCloud整合之Eureka高可用集群 项目来展示。
provide 我们不需要做任何修改,只需要在 consumer order模块加入以下依赖:

<!--springcloud 整合openfeign-->
<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

feign 调用接口

MemberApiFeign.java: @FeignClient指定provide服务别名,接口copy调用即可:

package com.baba.wlb.api.feign;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
/**
 * @Author wulongbo
 * @Date 2021/1/21 19:17
 * @Version 1.0
 */
@FeignClient(name = "app-member")
public interface MemberApiFeign {
    // Feign 书写方式以springMVC接口形式书写
 // @FeignClient调用服务接口name就是服务名称
 @RequestMapping("/getMember")
    String getMember();
}

控制页面

AppFeignController.java: 注入 Feign 接口

package com.baba.wlb.api.controller;
import com.baba.wlb.api.feign.MemberApiFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @Author wulongbo
 * @Date 2021/1/21 19:21
 * @Version 1.0
 */
@RestController
public class AppFeignController {
    @Autowired
 private MemberApiFeign memberApiFeign;
 @RequestMapping("/getFeignOrder")
    public String getFeignOrder() {
        return memberApiFeign.getMember();
 }
}

启动类

AppOrder启动类:添加 @EnableFeignClients 开启Feign客户端权限

package com.baba.wlb;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
/**
 * @Author wulongbo
 * @Date 2021/1/9 15:39
 * @Version 1.0
 */@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class AppOrder {
    public static void main(String[] args) {
        SpringApplication.run(AppOrder.class, args);
 // 第二种方式 如果使用rest方式以别名方式进行调用依赖ribbon负载均衡器
 // 第二种方式 @LoadBalanced能让restTemplate 模板在请求时拥有客户端负载均衡的能力
 }
    // 解决RestTemplate 找不到原因, 把RestTemplate注册到Springboot容器中 @Bean
 // 第一种方式
//    @Bean
//    RestTemplate restTemplate(){
//        return new RestTemplate();
//    }
 // 第二种方式 @LoadBalanced能让restTemplate 模板在请求时拥有客户端负载均衡的能力
//    @Bean
//    @LoadBalanced
//    RestTemplate restTemplate() {
//        return new RestTemplate();
//    }
 // @EnableFeignClients 开启Feign客户端权限
}

注:启动类位置要放正确

启动 Eureka Server服务,启动 member provide 服务,启动 order consumer 服务后访问:

http://localhost:8200/getFeignOrder

以上就是SpringCloud声明式Feign客户端调用工具使用的详细内容,更多关于SpringCloud声明式Feign的资料请关注脚本之家其它相关文章!

相关文章

  • Java并发之异步的八种实现方式

    Java并发之异步的八种实现方式

    本文主要介绍了Java并发之异步的八种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 关于Spring Data Jpa 自定义方法实现问题

    关于Spring Data Jpa 自定义方法实现问题

    这篇文章主要介绍了关于Spring Data Jpa 自定义方法实现问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring的同一个服务会加载多次的问题分析及解决方法

    Spring的同一个服务会加载多次的问题分析及解决方法

    这篇文章主要介绍了Spring的同一个服务为什么会加载多次,我们先来梳理一下 Web 容器中如何加载 Bean,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • SpringBoot访问MongoDB数据库的两种方式

    SpringBoot访问MongoDB数据库的两种方式

    MongoDB是一种非关系型数据库,通过文档存储数据,适用于大规模数据存储和高并发访问,这篇文章主要介绍了SpringBoot访问MongoDB数据库的两种方式,感兴趣想要详细了解可以参考下文
    2023-05-05
  • Java中如何执行多条shell/bat命令

    Java中如何执行多条shell/bat命令

    这篇文章主要介绍了Java中如何执行多条shell/bat命令的方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • java中redissonClient 分布式锁的使用

    java中redissonClient 分布式锁的使用

    在集群的情况下,用户多次请求接口时,存入的内容可能会导致重复,这时候就可以使用分布式锁来限制,本文就来介绍一下java中redissonClient 分布式锁的使用,感兴趣的可以了解一下
    2024-03-03
  • SpringBoot实现支付宝沙箱支付的完整步骤

    SpringBoot实现支付宝沙箱支付的完整步骤

    沙箱支付是一种用于模拟真实支付环境的测试工具,它提供了一个安全的测试环境,供开发者在不影响真实交易的情况下进行支付功能的开发和测试,这篇文章给大家介绍了SpringBoot实现支付宝沙箱支付的完整步骤,需要的朋友可以参考下
    2024-04-04
  • 使用GSON库转换Java对象为JSON对象的进阶实例详解

    使用GSON库转换Java对象为JSON对象的进阶实例详解

    这篇文章主要介绍了使用GSON库转换Java对象为JSON对象的进阶实例详解,包括注册TypeAdapter及处理Enum类型等实际运用中可能遇到的一些复杂问题,需要的朋友可以参考下
    2016-06-06
  • Maven项目打包成可执行Jar文件步骤解析

    Maven项目打包成可执行Jar文件步骤解析

    这篇文章主要介绍了Maven项目如何打包成可执行Jar文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Java中的BlockingQueue阻塞队列原理以及实现详解

    Java中的BlockingQueue阻塞队列原理以及实现详解

    这篇文章主要介绍了Java中的BlockingQueue阻塞队列原理以及实现详解,在最常见的使用到这个阻塞队列的地方,就是我们耳熟能详的线程池里面了,作为我们线程池的一大最大参与者,也是AQS的一个具体实现,需要的朋友可以参考下
    2023-12-12

最新评论