乐趣区

关于springcloud:SpringCloud入门3OpenFeign

Feign 的目标是为了编写 Java 客户端变得更加容易,大白话就是能够让咱们像平时 controller 调 service 一样不便,没有前两篇文章那么繁琐,具体能够看上面的例子。

1 引入 OpenFeign

建设一个父 open-feign 模块,在其模块下再建设一个子 feign-server 模块,为了导入 OpenFeign 模块,须要批改父模块的 pom 文件,其实就是退出了依赖

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

这样就可能把 OpenFeign 引入,最终的我的项目构造如下

2 配置文件和主启动类

没有什么非凡状况,服务都是注册进 Eureka 中,而后再编写本人的端口和服务名称即可。

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka/

server:
  port: 8101
spring:
  application:
    name: feign-server
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
//@EnableFeignClients    // 留神这个正文掉的注解
public class FeignConusme9201 {public static void main(String[] args) {SpringApplication.run(FeignConusme9201.class, args);
    }
}

这里简略说下@EnableDiscoveryClient@EnableEurekaClient 两个注解的区别,因为服务发现个别会有 Eureka、Consul 和 Zookeeper 三种实现。如果应用 Eureka 做服务注册和服务发现核心,举荐用后者;如果是其它注册核心,那么就能够用前者。

3 业务类

  1. service

    @FeignClient(value = "eureka-provide")
    public interface FeignService {@GetMapping(value = "/eureka/provide")
        String consume();}

@GetMapping 中的值就是申请服务的地址,@FeignClient 注解外面的 value 同样也是 name,还是反复同样一句话,这个值就是 须要调用的服务端的配置文件中的springcloud.application.name 的值,对于@FeignClient 注解,大略有以下几个属性,大部分都能够顾名思义,当前可能会具体介绍。

  1. controller

    @RestController
    public class FeignController {
    
        FeignService feignService;
    
        public FeignController(FeignService feignService) {this.feignService = feignService;}
    
        @GetMapping(value = "/feign/consume")
        public String consume() {return feignService.consume();
        }
    
    }

间接就很简略,和之前写的一般我的项目一样,相比之前少写了注入RestTemplate,而后调用网址返回后果等。

4 测试

其它的不必动,间接开启 FeignConsume9201 服务即可。如果内存不够的话,只须要开启服务注册核心EurekaServer8001、服务提供者EurekaProvide7001 和服务消费者FeignConsume9201

接着就是拜访 http://localhost:9201/feign/c…,看能不能正确的调用服务提供端。能够看到是可能失常调用服务提供端的。

留神,当一个我的项目中存在多个接口应用 @FeignClient 调用同一个服务,意思是说一个服务只能用@FeignClient 应用一次。

此时能够依照提醒在配置文件中设置spring.main.allow-bean-definition-overriding=true

5 服务降级

服务降级其实是前面的内容,这里也提一下,因为 OpenFiegn 其实集成了蛮多货色的。顺便简略说下服务降级的概念,就是当服务不可用的时候,真实情况下是不可能间接崩掉或者间接报错,都会有一个备用计划。

更改 service 代码

@FeignClient(value = "eureka-provide", fallback = FeignServiceFullbackImpl.class)
public interface FeignService {@GetMapping(value = "/eureka/provide")
    String consume();}

fullback 属性就是服务降级的类,这个类是须要实现这个 FeignService 这个接口的

public class FeignServiceFullbackImpl implements FeignService {
    @Override
    public String consume() {return "服务降级";}
}

为了模仿服务降级的场景,只须要开启EurekaServer8001 服务注册发现核心,并且开启FeignConsume9201,至于其它的服务提供者则不须要开启。

然而,如果仅仅如此,必定是会报错的,因为是有服务降级的思维,然而没有落实到实处,所以须要在配置文件中关上Hystrix,这个组件到前面会具体讲。并且,实现类须要注册进 Spring 能力在降级的时候被发现。

feign:
  hystrix:
    enabled: true
@Component    // 增加一个注解
public class FeignServiceFullbackImpl implements FeignService {// 省略}

同样还是拜访 http://localhost:9201/feign/c…

创作不易,如果对你有帮忙,欢送点赞,珍藏和分享啦!

上面是集体公众号,有趣味的能够关注一下,说不定就是你的宝藏公众号哦,根本 2,3 天 1 更技术文章!!!

退出移动版