SpringCloud-Zuul网关实践

1 zuul网关

1.1 新建工程

填写基本信息:
在这里插入图片描述
添加Zuul依赖
在这里插入图片描述

1.2 编写配置

server:
  port: 10010 #服务端口
spring:
  application:
    name: api-gateway #指定服务名

1.3 编写引导类

通过@EnableZuulProxy注解开启Zuul的功能:

@SpringBootApplication
@EnableZuulProxy // 开启网关功能
public class ItcastZuulApplication {

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

1.4 编写路由规则

我们需要用Zuul来代理service-provider服务,先看一下控制面板中的服务状态:

在这里插入图片描述

  • ip为:127.0.0.1
  • 端口为:8081

映射规则:

server:
  port: 10010 #服务端口
spring:
  application:
    name: api-gateway #指定服务名
zuul:
  routes:
    service-provider: # 这里是路由id,随意写
      path: /service-provider/** # 这里是映射路径
      url: http://127.0.0.1:8081 # 映射路径对应的实际url地址

我们将符合path 规则的一切请求,都代理到 url参数指定的地址

本例中,我们将 /service-provider/**开头的请求,代理到http://127.0.0.1:8081

1.5 启动测试

访问的路径中需要加上配置规则的映射路径,我们访问:http://127.0.0.1:10010/service-provider/user/1
在这里插入图片描述

2. 面向服务的路由

在刚才的路由规则中,我们把路径对应的服务地址写死了!如果同一服务有多个实例的话,这样做显然就不合理了。我们应该根据服务的名称,去Eureka注册中心查找 服务对应的所有实例列表,然后进行动态路由才对!

对itcast-zuul工程修改优化:

2.1 添加Eureka客户端依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2.2 添加Eureka配置,获取服务信息

eureka:
  client:
    registry-fetch-interval-seconds: 5 # 获取服务列表的周期:5s
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

2.3 开启Eureka客户端发现功能

@SpringBootApplication
@EnableZuulProxy // 开启Zuul的网关功能
@EnableDiscoveryClient
public class ZuulDemoApplication {

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

2.4 修改映射配置,通过服务名称获取

zuul:
  routes:
    service-provider: # 这里是路由id,随意写
      path: /service-provider/** # 这里是映射路径
      serviceId: service-provider # 指定服务名称

2.5 启动测试

再次启动,这次Zuul进行代理时,会利用Ribbon进行负载均衡访问

3 简化的路由配置

在刚才的配置中,我们的规则是这样的:

  • zuul.routes..path=/xxx/**: 来指定映射路径。是自定义的路由名
  • zuul.routes..serviceId=service-provider:来指定服务名。

而大多数情况下,我们的路由名称往往和服务名会写成一样的。因此Zuul就提供了一种简化的配置语法:zuul.routes.=

比方说上面我们关于service-provider的配置可以简化为一条:

zuul:
  routes:
    service-provider: /service-provider/** # 这里是映射路径

省去了对服务名称的配置。

4 默认的路由规则

在使用Zuul的过程中,上面讲述的规则已经大大的简化了配置项。但是当服务较多时,配置也是比较繁琐的。因此Zuul就指定了默认的路由规则:

  • 默认情况下,一切服务的映射路径就是服务名本身。例如服务名为:service-provider,则默认的映射路径就 是:/service-provider/**

也就是说,刚才的映射规则我们完全不配置也是OK的,不信就试试看

5 路由前缀

配置示例:

zuul:
  routes:
    service-provider: /service-provider/**
    service-consumer: /service-consumer/**
  prefix: /api # 添加路由前缀

我们通过zuul.prefix=/api来指定了路由的前缀,这样在发起请求时,路径就要以/api开头。
在这里插入图片描述

发布了214 篇原创文章 · 获赞 190 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/luckystar_99/article/details/105339435