【SpringBoot】SpringBoot 之 OpenFeign服务调用(八)

OpenFeign介绍

  前面在使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模版化的调用方法。但是在实际开发中,对于服务依赖的调用可能不止一处,往往一个接口会被多处调用。所有Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在Feign的实现下,我们只需创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),集可完成对服务提供方的接口绑定,简化了使用Spring Cloud Ribbon时,自动封装服务调用客户端的开发量。

  Feign旨在式编写Java Http客户端变得更容易。

  Feign集成了Ribbon,利用Ribbon维护了服务列表信息,并且通过轮询实现了客户端的负载均衡。而与Ribbon不同的是,通过feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用

  Feign与OpenFeign的区别

  1)Feign是Spring Cloud组件中一个轻量级RESTful的HTTP服务客户端,Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。Feign的使用方式是:使用Feign的注解定义接口,调用接口,就可以调用服务注册中心的服务

    Feign的依赖

1 <dependency>
2     <groupId>org.springframework.cloud</groupId>
3     <artifactId>spring-cloud-starter-feign</artifactId>
4 </dependency>

  2)OpenFeign是Spring Cloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中

    OpenFeign的依赖

1 <dependency>
2     <groupId>org.springframework.cloud</groupId>
3     <artifactId>spring-cloud-starter-openfeign</artifactId>
4 </dependency>  

OpenFeign使用

  项目架构如下:

  1个Eureka注册中心,2个服务提供者,1个服务消费者

  

  1、新建项目,参考【SpringCloud】SpringCloud 服务提供者集群与服务发现Discovery(三)

  2、新建一个服务消费者模块(test-springcloud-order7997)的maven工程

  3、修改pom文件,引入OpenFeign依赖,完整pom文件如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <parent>
 6         <artifactId>test-springcloud</artifactId>
 7         <groupId>com.test</groupId>
 8         <version>1.0-SNAPSHOT</version>
 9     </parent>
10     <modelVersion>4.0.0</modelVersion>
11
12     <artifactId>test-springcloud-order7997</artifactId>
13
14
15     <dependencies>
16
17         <!-- openfeign -->
18         <dependency>
19             <groupId>org.springframework.cloud</groupId>
20             <artifactId>spring-cloud-starter-openfeign</artifactId>
21         </dependency>
22
23         <!-- eureka client -->
24         <dependency>
25             <groupId>org.springframework.cloud</groupId>
26             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
27         </dependency>
28
29         <!-- spring boot -->
30         <dependency>
31             <groupId>org.springframework.boot</groupId>
32             <artifactId>spring-boot-starter-web</artifactId>
33         </dependency>
34         <dependency>
35             <groupId>org.springframework.boot</groupId>
36             <artifactId>spring-boot-starter-actuator</artifactId>
37         </dependency>
38         <dependency>
39             <groupId>org.springframework.boot</groupId>
40             <artifactId>spring-boot-devtools</artifactId>
41             <scope>runtime</scope>
42             <optional>true</optional>
43         </dependency>
44
45         <dependency>
46             <groupId>org.projectlombok</groupId>
47             <artifactId>lombok</artifactId>
48             <optional>true</optional>
49         </dependency>
50         <dependency>
51             <groupId>org.springframework.boot</groupId>
52             <artifactId>spring-boot-starter-test</artifactId>
53             <scope>test</scope>
54         </dependency>
55
56     </dependencies>
57
58     <build>
59         <finalName>test-springcloud-order8000</finalName>
60     </build>
61 </project>

pom.xml

    Feign集成了Ribbon:

    

  4、修改配置文件,application.yml

 1 # 端口
 2 server:
 3   port: 7997
 4
 5 spring:
 6   application:
 7     name: cloud-order
 8
 9 eureka:
10   client:
11     # 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
12     service-url:
13       defaultZone: http://localhost:8761/eureka
14   instance:
15     #  instance:
16     instance-id: ${spring.cloud.client.ip-address}:${server.port}
17     # 访问路径可以显示IP地址
18     prefer-ip-address: true

  4、编写SpringBoot启动类,并使用@EnableFeignClients注解,开始Feign客户端

1 // 开启Feign客户端
2 @EnableFeignClients
3 @SpringBootApplication
4 public class OrderMain7997 {
5     public static void main(String[] args) {
6         SpringApplication.run(OrderMain7997.class, args);
7     }
8 }

  5、编写接口,使用@FeignClient("CLOUD-PAYMENT-SERVICE")注解,表名此接口做为一个feign客户端,并调用CLOUD-PAYMENT-SERVICE服务。

1 @Component
2 // Feign客户端
3 @FeignClient("CLOUD-PAYMENT-SERVICE")
4 public interface PaymentFeignService {
5     // 获取
6     @GetMapping("/payment/get/{id}")
7     public CommonResult getPaymentById(@PathVariable("id") Long id)
8 }

  6、编写Controller,使用接口调用服务

 1 @RestController
 2 @Slf4j
 3 public class OrderFeignController {
 4
 5     @Autowired
 6     private PaymentFeignService paymentFeignService;
 7
 8     @GetMapping("/consumer/payment/get/{id}")
 9     public CommonResult getPaymentById(@PathVariable("id") Long id) {
10         return paymentFeignService.getPaymentById(id);
11     }
12 }

  7、启动项目,测试

    访问地址:http://localhost:7997/consumer/payment/get/1

    结果:

      正常远程调用服务提供者的服务,且达到负载均衡的目的

原文地址:https://www.cnblogs.com/h--d/p/12690840.html

时间: 2024-10-08 21:10:33

【SpringBoot】SpringBoot 之 OpenFeign服务调用(八)的相关文章

SpringBoot系列十一:SpringBoot整合Restful架构(使用 RestTemplate 模版实现 Rest 服务调用、Swagger 集成、动态修改日志级别)

1.概念:SpringBoot整合Restful架构 2.背景 Spring 与 Restful 整合才是微架构的核心,虽然在整个 SpringBoot(SpringCloud)之中提供有大量的服务方便整合,但是这些 整合都不如 Rest 重要,因为 Rest 是整个在微架构之中进行通讯的基础模式.那么对于 Rest 首先必须对其有一个最为核心的解释: 利用 JSON 实现数据的交互处理.而且 Spring 里面提供有一个非常强大的 RestTemplate 操作模版,利用此模版可以非常轻松的实

构建SpringBoot,SpringCloud微服务架构分布式电商项目实战

Spring Cloud 微服务总体架构图 上面图中技术名词理解: 1.Sleuth-链路跟踪 为服务之间调用提供链路追踪.通过Sleuth可以很清楚的了解到一个服务请求经过了哪些服务,每个服务处理花费了多长.从而让我们可以很方便的理清各微服务间的调用关系. 2.断路器(Hystrix) 在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用.为了保证其高可用,单个服务通常会集群

Springboot &amp; Mybatis 构建restful 服务四

Springboot & Mybatis 构建restful 服务四 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务三 2 restful service 添加 Apache POI生成 Excel 文件 1)修改 POM.xml文件 添加 Apache POI 的依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-oo

Springboot &amp; Mybatis 构建restful 服务三

Springboot & Mybatis 构建restful 服务三 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务二 2 restful service 添加日志 1)新建 logback.xml文件(配置生成的日志文件的格式) src/main/resources/logback.xml <?xml version="1.0" encoding="UTF-8"?>   <!-- 设置根

基于SpringBoot开发一个Restful服务,实现增删改查功能

在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练.不过在看了很多关于SpringBoot的介绍之后,并没有想象中的那么难,于是开始准备学习SpringBoot. 在闲暇之余的时候,看了下SpringBoot实战以及一些大神关于SpringBoot的博客之后,开始写起了我的第一个SpringBoot的项目.在能够对SpringBoot进行一些简单的开发Re

Spring Cloud ZooKeeper集成Feign的坑2,服务调用了一次后第二次调用就变成了500,错误:Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.n

错误如下: 2017-09-19 15:05:24.659 INFO 9986 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.spring[email protected]56528192: startup date [Tue Sep 19 15:05:24 CST 2017]; root of context hierarchy 2017-09-19 15:05:24.858 INFO 9986 --

SpringCloud系列——Feign 服务调用

前言 前面我们已经实现了服务的注册与发现(请戳:SpringCloud系列——Eureka 服务注册与发现),并且在注册中心注册了一个服务myspringboot,本文记录多个服务之间使用Feign调用. Feign是一个声明性web服务客户端.它使编写web服务客户机变得更容易,本质上就是一个http,内部进行了封装而已. GitHub地址:https://github.com/OpenFeign/feign 官方文档:https://cloud.spring.io/spring-cloud-

SpringCloud(4)---Ribbon服务调用,源码分析

SpringCloud(4)---Ribbon 本篇模拟订单服务调用商品服务,同时商品服务采用集群部署. 注册中心服务端口号7001,订单服务端口号9001,商品集群端口号:8001.8002.8003. 各服务的配置文件这里我这边不在显示了,和上篇博客配置一样.博客地址:SpringCloud(3)---Eureka服务注册与发现 一.商品中心服务端 1.pom.xml <?xml version="1.0" encoding="UTF-8"?> &l

SpringCloud(5)---Feign服务调用

SpringCloud(5)---Feign服务调用 上一篇写了通过Ribbon进行服务调用,这篇其它都一样,唯一不一样的就是通过Feign进行服务调用. 注册中心和商品微服务不变,和上篇博客一样,具体参考:SpringCloud(4)---Ribbon服务调用,源码分析 这边只重写订单微服务. 一.OrderService 订单微服务 1.pom.xml 这里相对于上一篇的订单微服务只要新添加一个jar包 <!--feign依赖--> <dependency> <group