版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tang86100/article/details/78895084
现在服务也统一注册管理了,配置也统一管理了,我们就可以疯狂的开发各项微服务了,是不是还觉得少了点什么?前端怎么访问到相应服务?这就用到路由网关了。
路由网关就是整个微服务的统一入口,看看第一张的架构图,项目的前端做成了动静分离,静态文件、html页面、css文件和js文件都放在了web服务器(Nginx或Apache),
如果微服务都是单台部署,web服务器直接找到对应的服务看起来也没多大问题,如果单个微服务挂了呢?就任凭系统返回500么,所以,真实的部署环境中每个微服务都应该有负载均衡或者备用服务的,用这种方式提升大象系统的可靠性,同时也分可以分散业务处理的压力,如果这样,前端的请求地址配置起来就会显得非常乱,而且不知道什么时候请求哪一个服务,路由网关的作用就显现出来了,通过路由的配置,访问同一个资源,路由网关就会帮你把请求转到最适合的微服务中去。
我们来实现一下路由网关,第一步都是一样的,创建module,命名gateway,引入依赖包:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.0.RELEASE</version> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Camden.SR2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> </dependencies>在resource目录下城建配置文件application.yml,写入以下内容:
eureka: client: service-url: defaultZone: http://localhost:8090/eureka/ spring: application: name: gateway server: port: 8091 zuul: routes: service-user: /service-user/** service-product: /service-product/** config-client: /config-client/**看过前面章节内容的都已经很眼熟了,只有zuul那块是新内容,routes下面的内容是路由的映射,例如service-product:/service-product/**,表示所有的/service-product/**资源请求都会交给spring.application.name为service-product的微服务处理,清晰合理的管理了各种微服务资源。
再来实现他的微服务主程序:
package com.tzy.gateway; 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 public class Main { public static void main(String[] args){ SpringApplication.run(Main.class,args); } }@EnableZuulProxy表示该应用是路由代理
此时,Zuul的配置已成功,延续上一节的内容,再启动路由网关(Eureka只要先启动就ok,其他后启动的会自动注册上),访问地址localhost:8091/service-product/getConfig,还是会获得到password的内容,这里要注意访问的是Zuul的端口号8091。