SpringCloud Zuul路由网关及负载均衡

上一篇文章我们学习了SpringCloud搭建微服务注册中心、服务注册及服务调用这一篇介绍Zuul
欢迎关注我的博客:StarTower小站

Zuul路由网关

Zuul可以理解为一个集网关(路由)、负载均衡、校验过滤、结合服务治理框架、请求转发时熔断机制、服务聚合等 一系列功能。我们可以将Zuul当成一个门面,所有外部请求都经过Zuul的转发到具体的服务实例,减少了每个服务之间互相鉴权代码冗余问题,统一交给Zuul进行鉴权,在此基础上集成上边说的高级功能。路由功能相当于反向代理。当调用服务时不再需要记住杂乱的端口号,可以直接通过路由网关直接调用

Zuul可以通过加载动态过滤机制,从而实现以下各项功能:

1.验证与安全保障: 识别面向各类资源的验证要求并拒绝那些与要求不符的请求。
  2.审查与监控: 在边缘位置追踪有意义数据及统计结果,从而为我们带来准确的生产状态结论。
  3.动态路由: 以动态方式根据需要将请求路由至不同后端集群处。
  4.压力测试: 逐渐增加指向集群的负载流量,从而计算性能水平。
  5.负载分配: 为每一种负载类型分配对应容量,并弃用超出限定值的请求。
  6.静态响应处理: 在边缘位置直接建立部分响应,从而避免其流入内部集群。
  7.多区域弹性: 跨越AWS区域进行请求路由,旨在实现ELB使用多样化并保证边缘位置与使用者尽可能接近。

下面是有关Zuul路由网关的一个Demo

接着前一篇的内容我们创建了端口号分别为1111,2222,3333的注册中心与,服务提供者与服务调用者
在原来的基础上创建gatway模块,可以在创建模块时添加zuul,与Ribbon,Ribbon稍后会用到
或者在pom文件中加入如下配置

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.3.5.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
            <version>1.3.5.RELEASE</version>
        </dependency>

在启动类添加如下注解

package com.springcloud.gatway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy	//允许zuul代理
public class GatwayApplication {

    public static void main(String[] args) {
        SpringApplication.run(GatwayApplication.class, args);
    }

}

配置总的配置文件

server.port=8081
spring.application.name=API-GATWAY
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:1111/eureka/
zuul.routes.api.path=/api/**
zuul.routes.api.serviceId=SERVICE-A
  • 前三个在上一篇文章中介绍过
  • zuul.routes.api.path=/api/**
    zuul.routes.api.serviceId=SERVICE-A
    当我的访问地址符合/api-a/** 规则的时候,会被自动定位到 SERVICE-A服务上去,这么做的目的是防止ip暴露

配置完后网关就可以启动测试了,要先启动注册中心再启动服务提供者和服务调用者

可以看到我们成功使用zuul代理访问了端口号为3333的hello方法访问到了服务提供端2222的getName方法

Ribbon

Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。

我们在刚才的基础上再创建一个端口号为5555的服务提供端
其中的HelloAction代码如下:

package com.action;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloAction {

    @Value("${server.port}")
    private String port;
    @RequestMapping("/getName")
    public String hello(){
        return "你好,中国"+port;
    }
}

配置总配置文件application.properties

server.port=5555
spring.application.name=SERVICE-B
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:1111/eureka/

拥有不同的端口号但是有相同的服务注册名

新服务提供者的启动类配置如下:

package com.springcloud.client03;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan("com.action")
@EnableEurekaClient
public class Client03Application {

    public static void main(String[] args) {
        SpringApplication.run(Client03Application.class, args);
    }

}

在服务调用端的启动类中,若想启用Ribbon的负载均衡需要如下配置,添加@LoadBalanced注解

package com.springcloud.client;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableEurekaClient
@ComponentScan("com.action")
public class ClientApplication {

    @Bean
    @LoadBalanced   //调用方法时启用负载均衡
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(ClientApplication.class, args);
    }

}

在前面都启动过的基础上重启服务调用端和启动新的服务提供端5555
启动后可在服务注册中心中看到
SERVICE-B的服务有两个端口号分别为2222,5555
再次通过网关调用会发现会轮回调用2222与5555的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud作为基于Spring Boot的微服务框架,为解决微服务中的通信、服务治理、负载均衡等问题提供了良好的解决方案。其中,Spring Cloud网关是实现微服务架构中请求分发和负载均衡的重要组件。 在Spring Cloud网关中,基于Zuul和Spring Cloud Gateway两种方案,可以实现对外的负载均衡配置。其中,采用Zuul的方式进行负载均衡的实现相对简单,但是功能相对较弱;而采用Spring Cloud Gateway方式实现的负载均衡则更加强大,也得到了更多的应用。 Spring Cloud Gateway是Spring Cloud生态中提供的一个新的网关解决方案,相比于Zuul,它的性能更高、更易扩展,并且还支持WebSocket。 在实现Spring Cloud Gateway的负载均衡功能时,需要在配置文件中指定所使用的负载均衡策略,例如: ``` spring: cloud: gateway: routes: - id: service1 uri: lb://service1 predicates: - Path=/service1/** filters: - StripPrefix=1 lb: client-name: service1 rule-config: RoundRobinLoadBalancer ``` 具体来说,上述配置文件中,路由规则为请求/service1/**会被转发到URI为lb://service1的微服务上,其中lb表示负载均衡策略,client-name表示微服务的名称,rule-config表示所使用的负载均衡算法。 除此之外,还可以通过添加Eureka Server以及Ribbon等依赖来进一步优化Spring Cloud Gateway的负载均衡能力,这样可以将服务注册在Eureka上,然后将IP地址分散在多台机器上,实现更好的负载均衡效果。 综上所述,Spring Cloud网关为微服务架构中的请求分发和负载均衡提供了良好的解决方案,在具体的配置时需要根据实际情况进行操作,以达到最佳的负载均衡效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值