白话SpringCloud | 第九章:路由网关(Zuul)的使用 (2)

0.加入pom依赖。

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

注意:这里的Eureka不是必须的。在没有注册中心的情况下,也是可以进行zuul使用的。

1.配置文件,配置注册中心相关信息、路由规则等。

spring.application.name=zuul-server server.port=8888 # 注册中心地址 -此为单机模式 eureka.client.service-url.defaultZone=http://127.0.0.1:1000/eureka # 启用ip配置 这样在注册中心列表中看见的是以ip+端口呈现的 eureka.instance.prefer-ip-address=true # 实例名称 最后呈现地址:ip:15678 eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port} ## 路由规则 ## 传统路由配置:不依赖服务发现。 ## 所有以myapi开头的url路由至:2000/下 ## 如:8888/myapi/hello --> :2000/hello zuul.routes.myApi.path=http://www.likecs.com/myapi/** zuul.routes.myApi.url=http://127.0.0.1:2000 #forward模式 直接转发至zuul提供的rest服务 zuul.routes.myDemo.path=http://www.likecs.com/myDemo/** zuul.routes.myDemo.url=forward:/demo ## 服务发现模式 # 路由地址 zuul.routes.myEureka.path=http://www.likecs.com/eureka/** #为具体服务的名称 zuul.routes.myEureka.service-id=eureka-client

友情提示:
默认情况下:Zuul代理所有注册到EurekaServer的微服务,路由规则:
:ZUUL_PORT/微服务实例名(serverId)/**
转发至serviceId对应的微服务。

如::8888/eureka-client/hello?name=oKong
最后就是转发至::2000//hello?name=oKong

2.启动类加入@EnableZuulProxy注解,声明一个Zuul代理。

/** * zuul 示例 * * @author oKong * */ @SpringBootApplication @EnableZuulProxy @EnableDiscoveryClient @Slf4j public class SpringCloudZuulApplication { public static void main(String[] args) throws Exception { SpringApplication.run(SpringCloudZuulApplication.class, args); log.info("spring-cloud-zuul启动!"); } }

3.编写一个控制类,测试forward功能。

/** * zuul 内部提供对外服务示例 * @author oKong * */ @RestController @RequestMapping("/demo") public class DemoController { @GetMapping("/hello") public String hello(String name) { return "hi," + name + ",this is zuul api! "; } }

4.启动spring-cloud-eureka-server和spring-cloud-eureka-client服务,之后再启动spring-cloud-zuul服务。

此时,我们来访问zuul内部服务::8888/demo/hello?name=oKong

zuul内部服务

然后访问::8888/myDemo/hello?name=oKong 效果和上面直接方式是一样的,最后都是访问/demo/**api地址的。

访问::8888/myapi/hello?name=oKong 和 :8888/eureka/hello?name=oKong 最后效果都是一样的,都是访问:2000/hello?name=oKong 。

eureka服务

非eureka服务

直接以默认形式访问::8888/eureka-client/hello?name=oKong 最后效果也是一样的。

默认形式

其实,从控制台输出日志也是可以一窥究竟的:

控制台输出

路由规则说明

简单说明下关于路由规则的一些说明:

传统路由配置:不依赖服务发现,如nginx

单例实例配置:通过zuul.routes.<route>.path和zuul.routes.<route>.url参数对的方式来配置

# 传统路由配置 zuul.routes.server-provide.path=http://www.likecs.com/server-provide/** zuul.routes.server-provide.url=http://127.0.0.1:1001/

多实例配置:通过一组zuul.routes.<route>.path与zuul.routes.<route>.serviceId参数对的方式配置

# 多实例 zuul.routes.server-provide.path=http://www.likecs.com/user-service/** zuul.routes.server-provide.serviceId=user-service ribbon.eureka.enabled=false server-provide.ribbon.listOfServers=http://127.0.0.1:1001/,:1001/ 服务路由配置:依赖服务发现,结合Eureka

默认规则::ZUUL_PORT/微服务实例名(serverId)/** ,转发至serviceId对应的微服务。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzwds.html