springcloud学习之路(三):负载均衡与熔断器

本文详细介绍了如何在SpringCloud中搭建负载均衡服务和熔断器。首先,通过添加相关依赖、配置文件和后端代码,实现了负载均衡服务,确保在多个相同注册名的服务间切换调用。然后,通过引入熔断器,当服务挂掉时,提供反馈或备用处理方案,提升服务体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一篇的springcloud学习之路(二):网关路由服务中的yml配置文件中配置了路由的路径为

zuul:
  prefix: /api
  routes:
#    api-a:
#      path: /a/**
#      serviceId: service-ribbon-1
    api-b:
      path: /b/**
      serviceId: feign-service
#      stripPrefix: false   #不移除前缀api-b,访问路径为/api/b/test --> user-center   /b/test(需要在对应资源的RequestMapping前加/b使之为/b/test)
#      默认时 /api/b/test --> user-center   /test

当使用localhost:8000/api/b/test访问资源的时候,实际上是由网关先到负载均衡微服务,由负载均衡再去调资源服务中的”/test”路径,从而获取到资源。很显然,配置文件中的feign-service表示的就是负载均衡服务。

一、负载均衡服务的搭建

首先新建一个空的maven项目,取名feign-service,在创建过程中步添加任何依赖,直接在pom.xml文件里加,这样更能清楚的知道流程。建好一个空有结构的maven项目后,依旧按照三步走的方式去完成该微服务。

1、依赖包pom.xml文件
既然是微服务,那么肯定要添加微服务的定义包spring-cloud-starter-eureka或者spring-cloud-starter-eureka-server(仅限注册中心);一个微服务是需要被其他微服务发现的,以供调用或作它用,这便是spring-boot-starter-actuator包的作用;既然它是个feign负载均衡微服务,那么也得需要定义它的包spring-cloud-starter-feign。在pom.xml文件中,添加这三个依赖就可以了。

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2、配置文件application.yml(application.properties)文件

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8000/eureka/

server:
  port: 8002

spring:
  application:
    name: feign-service

作为一个微服务,它是需要注册到注册服务中心的,可以回到注册中心看看,端口8000也即是注册中心服务的端口。其次是需要定义负载均衡服务的服务端口,设置为8002,服务的注册名为feign-service(注意:要与路由网关中的服务名保持一致)。

3、后端代码的编写
(1)在java文件夹下新建一个com.springcloud.feign包,在该包下新建FeignServiceBootstrap类作为启动类,完善该类内容如下:

@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class FeignServiceBootstrap {
    public static void main(String[] args) {
        SpringApplication.run(FeignServiceBootstrap.class, args);
    }
}

三个注解的含义也是比较明显的,第一个声明它是一个资源服务端,即可以通过某些接口调用一些资源;第二个声明他是个负载均衡服务;第三个声明其为springboot项目。写到这里,只是将这个负载均衡定义好了,但是并没有实际的功能。因此需要添加些东西,使之功能完善。

(2)在com.springcloud.feign包下,新建一个feign包,创建一个接口,取名BalancedFeign,填充内容如下:

@FeignClient(value = "user-center")
public interface BalancedFeign {
    @RequestMapping(value = "/test",method = RequestMethod.GET)
    String sayFromClientOne();
}

注解声明了负载均衡的资源的注册名为“user-center”,这样就把负载均衡服务与资源服务联系起来了。那么如何去访问这个BalancedFeign呢,肯定的需要建一个控制层。

(3)在com.springcloud.feign包下,新建一个controller包,作为控制层,与启动类的@EnableDiscoveryClient注解是呼应的。在该包下,新建一个FeignController类,填充内容如下:

@RestController
public class FeignController {
    @Autowired
    BalancedFeign balancedFeign;

    @RequestMapping("/test")
    public String makeFeign() {
        return balancedFeign.sayFromClientOne();
    }
}

这样就完成了负载均衡服务,假如有注册名同为user-center的两个服务,当调用负载均衡的时候,便会在两个服务之间切换调用,从而达到负载均衡的目的。
假若这两个服务有一个挂掉了,而负载均衡正好调用到了这个挂掉了的服务,就会造成等待或者其他的不好的用户体验。为了更好的服务体验,所以我们需要一个熔断器来解决这个问题。

二、熔断器

改造接口BalancedFeign如下:

@FeignClient(value = "user-center",fallback = SchedualServiceHystric.class)
public interface BalancedFeign {
    @RequestMapping(value = "/test",method = RequestMethod.GET)
    String sayFromClientOne();
}

实际上只是多了一个fallback,使服务在挂掉的时候提供一个反馈。接下来覆写反馈的内容,在feign包下,新建一个SchedualServiceHystric类,填充该类内容如下:

public class SchedualServiceHystric implements BalancedFeign{
    @Override
    public String sayFromClientOne() {
        return "这个服务出问题了";
    }
}

当某个服务挂掉的时候,会立即进行反馈,或者作其他处理。至此,负载均衡与熔断器就介绍完了。需要参考源码的,可以回到springcloud学习之路总览页下载查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值