SpringCloud浅尝(七)——Zuul

路由器和过滤器:Zuul

我们都知道在微服务架构中,系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?难道要一个个的去调用吗?很显然这是不太实际的,我们需要有一个统一的接口与这些微服务打交道,这就是我们需要服务网关的原因。路由在微服务体系结构的一个组成部分。Zuul是Netflix的基于JVM的路由器和服务器端负载均衡器,Zuul实现了两个功能,路由转发和过滤器。例如,/可以映射到您的Web应用程序,/api/users映射到用户服务,并将/api/shop映射到商店服务。

我们新建一个项目ZuulServer,引入spring-cloud-starter-netflix-zuul 、spring-cloud-starter-netflix-eureka-client、spring-cloud-config-client

plugins {
	id 'org.springframework.boot' version '2.1.3.RELEASE'
	id 'java'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.sl'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
	mavenCentral()
}

ext {
	set('springCloudVersion', 'Greenwich.SR1')
}

dependencies {
	implementation 'org.springframework.cloud:spring-cloud-config-client'
	implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
	implementation 'org.springframework.cloud:spring-cloud-starter-netflix-zuul'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

dependencyManagement {
	imports {
		mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
	}
}

在启动类中,加上@EnableZuulProxy注解

@SpringBootApplication
@EnableZuulProxy
public class ZuulServerApplication {

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

}

我们新建一个bootstrap.yml ,我们还是和前面一样配置走ConfigServer

spring:
  profiles: zuul01
  application:
    name: zuulserver
  cloud:
    config:
      discovery:
        enabled: true
        service-id: configserver  # 注册中心的服务名
        profile: zuul01  # 指定配置文件的环境
    bus:
      refresh:
        enabled: true
  kafka:
      bootstrap-servers: localhost:9092
server:
  port: 8011
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8081/eureka/,http://localhost:8082/eureka/,http://localhost:8083/eureka/
management:
  endpoints:
      web:
        exposure:
          include: '*'

 

接下来我们启动一下实例,通过

http://localhost:8011/eurekadiscovery/hi?name=joe 就能访问到EurekaDiscovery上的接口

访问地址说明:/eurekadiscovery是需要访问的服务的名称,/hi?name=joe是接口参数

直接访问configserver也是可以的

默认情况下,zuul的熔断机制超时时间是2秒,当一个服务响应的时间较长就会报网关超时错误。

zuul三种超时时间的配置

ribbon.ReadTimeout, ribbon.SocketTimeout是ribbon超时时间
zuul.host.connect-timeout-millis, zuul.host.socket-timeout-millis这两个和上面的ribbon都是配超时的。区别在于,如果路由方式是serviceId的方式,那么ribbon的生效,如果是url的方式,则zuul.host开头的生效。
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=6000 ,ribbon和hystrix是同时生效的,哪个值小哪个生效

上面每次请求某个服务的接口,都需要带上这个服务的名称。我们可以在配置文件中,增加路由的自定义配置。有些服务的接口不希望对外暴露可以增加路由排除的配置listForOrder防止被外部访问.我们前面已经使用了ConfigServer 来动态更新配置文件。

我们就是git上新建一个配置文件,内容如下:

zuul:
  routes:
      dis:
        path: /dis/**
        serviceId: eurekadiscovery
  ignored-patterns:
  - /configserver/**
ribbon:
  ReadTimeout: 3000
  ConnectTimeout: 3000

我们还需要添加一个类,用于更新配置文件zuul配置

@Component
public class ZuulConfig {
    @RefreshScope
    @ConfigurationProperties("zuul")
    public ZuulProperties zuulProperties(){
        return new ZuulProperties();
    }
}

http://localhost:8011/dis/hi?name=joe

http://localhost:8011/configserver/eurekadiscovery-dis02.yml

我们更改一下,git上面的routes配置改成:zuul.routes.dis.path: /mydis/**,并Post刷新一下

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值