springcloud 通过feign 远程调用三方项目的接口

本文详细介绍使用Feign实现客户端调用服务端接口的过程。从搭建Eureka注册中心开始,到服务提供端与客户端的配置,最后验证调用效果。涵盖Spring Cloud、Feign、Eureka等关键组件。

一、前言

1、 此篇博客主要记录自己最近尝试使用feign调用三方项目的接口而编辑的demo,不足之处,烦请指点一二!!!!

2、分别搭建用户中心(eureka)、服务提供方(server)、客户端(client),如下图:

二、搭建用户中心

1、pom文件(eureka.pom):添加如下依赖

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2、启动类上添加如下注解:

@EnableEurekaServer

如下图:

3、编辑配置文件(application.yml)

如下图:

4、启动用户中心:

访问地址(此处是本篇博客使用地址):http://localhost:9999/

如下图:

以上用户中心搭建完毕!!!!

三、搭建服务提供端(service)

1、pom文件(service.pom):添加如下依赖

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2、启动类上添加如下注解:

@EnableDiscoveryClient

如下图:

3、编辑配置文件(application.yml):

如下图:

4、编辑对外提供服务的接口(如下示例):

a、service结构如下:

b、编辑ServiceApi,如下图:

c、编辑ServiceController,如下图:

5、启动server服务(注:要保证eureka注册中心是启动状态):

如下图:

如上:服务端配置完成!!!

四、搭建客户端(client):

1、pom文件(client.pom),添加如下依赖:

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

以上依赖多了个spring-cloud-starter-openfeign,是为了开启feign调用

2、启动类上添加如下注解:

@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.example.client.api")

如下图:

 3、编辑配置文件(application.yml):

如下图:

4、编辑调用服务端(service)的接口:

a、client结构如下:

b、编辑ClientApi,如下图:

注:此处编辑feignClient接口注意事项比较多:

1、包括参数注解需要指定value,

2、请求注解只能用@RequestMapping,自己定义请求method,

3、如果是post请求,里面的RequestBody性质的参数只能有一个

4、特别注意调用路径问题,否则会出现404的错误

 

c、编辑ClientController,如下图:

5、启动客户端(保证注册中心eureka和服务端service已经启动):

如下图:

以上客户端搭建完毕!!!

五、校验客户端是否能够通过feign调用服务端提供的接口

1、请求路径:

http://localhost:7777/api/client/findName?name=zgl

2、请求结果:

3、也可以在服务端打一个断点,然后调用客户端的接口,看服务端的断点是否可以拦截,如下图:

综上就是通过feign调用三方接口的一个demo!!!!

### Spring Cloud Feign 远程调用 示例代码 #### 1. 引入 Feign 依赖 为了在项目中使用 Feign,需要先引入相应的 Maven 或 Gradle 依赖。以下是 Maven 的配置示例: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> ``` 此部分操作是为了确保项目的构建文件能够支持 Feign 功能[^1]。 --- #### 2. 启动类添加注解 为了让应用支持 Feign 客户端功能,在主启动类上需添加 `@EnableFeignClients` 注解。以下是一个典型的 Spring Boot 应用程序启动类的实现方式: ```java @SpringBootApplication @EnableFeignClients // 开启 Feign 支持 public class OrderApplication { public static void main(String[] args) { SpringApplication.run(OrderApplication.class, args); } @Bean @LoadBalanced // 配置负载均衡的 RestTemplate public RestTemplate restTemplate() { return new RestTemplate(); } } ``` 通过上述设置,可以启用 Feign 并集成 Ribbon 实现负载均衡功能[^2]。 --- #### 3. 编写 Feign 客户端接口 定义一个 Feign 接口来描述目标服务的 API 调用逻辑。例如,假设有一个名为 `product-service` 的微服务,可以通过如下方式进行远程调用: ```java @FeignClient(name = "product-service", fallback = ProductFallback.class) public interface ProductService { @GetMapping("/products/{id}") String getProductById(@PathVariable("id") Long id); @PostMapping("/products") ResponseEntity<String> createProduct(@RequestBody Product product); } ``` 在此处,`name` 属性指定了要调用的服务名称,而方法签名则映射到对应的目标 URL 和 HTTP 方法。 --- #### 4. 使用 Feign 客户端 完成以上步骤后,可以在业务层直接注入并使用该 Feign 客户端实例。下面展示了一个简单的控制器例子: ```java @RestController @RequestMapping("/orders") public class OrderController { private final ProductService productService; public OrderController(ProductService productService) { this.productService = productService; } @GetMapping("/{productId}") public String getOrderDetails(@PathVariable("productId") Long productId) { try { return productService.getProductById(productId); // 调用产品服务获取商品详情 } catch (Exception e) { return "Error fetching product details."; } } } ``` 这里展示了如何利用已创建好的 Feign 客户端发起跨服务请求。 --- #### 5. 处理异常与回退机制 为了避免因网络问题或其他原因导致的服务不可用情况影响整个系统稳定性,通常会为 Feign 提供 Hystrix 断路器的支持以及自定义回退处理逻辑。比如上面提到的 `fallback` 参数指向了一个备用实现类: ```java @Component public class ProductFallback implements ProductService { @Override public String getProductById(Long id) { return "Default Product Information"; } @Override public ResponseEntity<String> createProduct(Product product) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Failed to Create"); } } ``` 当实际调用失败时,将返回由这个备份对象所提供的默认响应数据。 --- ### 总结 Spring Cloud Feign 是一种非常方便快捷的方式来管理分布式架构下的 RESTful 请求交互过程。只需简单几步即可搭建起高效稳定的通信桥梁,并且还具备强大的扩展能力满足不同场景需求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值