企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## url方式 ~~~ zuul: routes: haha: #key可以随便写 path: /user-service/** #匹配user-service为前缀的所有路径,并且把**部分的路径转发到下面的url url: http://127.0.0.1:8082 #匹配user为前缀的所有路径转发到此地址 ~~~ 测试: ![](https://box.kancloud.cn/cfc53a6f538a7db2b385202c2bcfef58_2148x632.png) ## 面向服务的路由 在上面的路由规则中,我们把路径对应的服务地址写死了!如果同一服务有多个实例的话,这样做显然就不合理了。 我们应该根据服务的名称,去Eureka注册中心查找 服务对应的所有实例列表,然后进行动态路由才对! 因为Zuul已经引入了ribbon,所以使用面向服务的路由已经自动完成了负载均衡. 引入eureka依赖: ~~~ <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> <version>2.0.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>2.0.1.RELEASE</version> </dependency> </dependencies> ~~~ **启动类加上@EnableDiscoveryClient注解用来发现服务.** 配置: ~~~ server: port: 10010 spring: application: name: api-gateway eureka: client: service-url: defaultZone: http://127.0.0.1:10086/eureka #将当前服务注册到eureka zuul: routes: haha: #key可以随便写 path: /user-service/** #匹配user-service为前缀的所有路径,并且把**部分的路径转发到下面的服务 serviceId: consumer-server #这里是服务的ID ~~~ 测试: ![](https://box.kancloud.cn/af5735b92accbe88a825c51f4e48e93e_2100x626.png) ## 简化路由配置 ~~~ zuul: routes: consumer-server: /user-service/** #key是服务的ID,值是服务的映射路径 ~~~ **我们并没有配置consumer-server,但是也可以访问.因为这种配置方法太常见了,服务的ID配置为映射的路径,所以zuul将eureka的服务列表全部拉取下来,自动默认实现了将服务ID作为映射的前缀.也就是说我们可以什么都不用配置了,也可以实现请求转发.** ![](https://box.kancloud.cn/a8d161be475eeb696a6a61da1d23108e_2170x666.png) ## 去掉url中的服务ID 通过下面的方式去访问显得url太长了,并且也暴露了服务的ID.通过配置可以简化URL. ``` http://localhost:10010/api/user-server/user/1 ``` ~~~ zuul: prefix: /api #路由前缀 routes: user-server: path: /user/** serviceId: user-server strip-prefix: false #默认是true,我们改成false,这样就不会将映射的前缀修剪掉(保留下来).配置在服务下面是局部的. ~~~ 测试:达到了我们需要的效果. ![](https://box.kancloud.cn/255be8881e8e9fb3905449a4458a7475_1698x974.png) ## 全局strip-prefix: false ~~~ zuul: prefix: /api #全局的只对这一项起作用,默认为true,我们基本不需要配置,因为没什么用. strip-prefix: false ~~~ ## 隐藏服务不对外暴露 有些服务比较敏感,我们不希望对外暴露,只希望服务间的内部访问. ~~~ zuul: routes: consumer-server: /user-service/** #key是服务的ID,值是服务的映射路径 ignored-services: - yyy-server #将不需要对外暴露的服务写在此处,注意是一个集合 - xxx-server ~~~ ## 路由前缀 这样所有的访问都要加上api前缀,因为Java现在一般都是只提供接口了,所以加上此前缀比较好. ~~~ zuul: prefix: /api #路由前缀 ~~~