您的位置:首页 > 编程语言 > Java开发

springcloud入门之路由网关zuul

2017-12-05 17:29 791 查看
在前几篇springcloud的学习中,我们分别尝试搭建了一个分布式项目架构的基础模块,使用eureka实现服务的注册与发现的服务注册中心eureka-sercer和服务提供者eureka-client,使用ribbon或feign支持服务的调用和负载均衡的service-ribbon和service-feign,hystrix处理服务的熔断防止故障扩散,Spring Cloud Config服务集群配置中心的config-server和config-client。最后缺少一个用于外部的应用如何来访问内部各种各样的微服务功能的实现,一般来说后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服务。当添加API网关后,在第三方调用端和服务提供方之间就创建了一面墙,这面墙直接与调用方通信进行权限控制,后将请求均衡分发给后台服务端。

Spring Cloud Zuul路由是微服务架构的不可或缺的一部分,提供动态路由,监控,弹性,安全等的边缘服务。Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。

在这里对之前的项目进行拓展实现zuul功能,之前代码步骤可以查看

http://blog.csdn.net/chenhaotao/article/details/78716608

下面开始创建一个简单的springcloud zuul工程

1.新建一个springboot项目service-zuul,依赖选择eureka、zuul、web

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>


2.在启动类Application加上注解@EnableZuulProxy开启zuul功能

@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class ServiceZuulApplication {

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


zuul工程同时也要作为服务注册到eureka注册中心去,所以还要加上注解@EnableEurekaClient

3.在application.yml配置文件中配置zuul属性和注册中心地址等

eureka:
client:
serviceUrl:
defaultZone: http://localhost:1111/eureka/ server:
port: 9003
spring:
application:
name: service-zuul
zuul:
routes:
api-a:
path: /api-a/**
serviceId: SERVICE-FEIGN
api-b:
path: /api-b/**
serviceId: SERVICE-RIBBON


注:SERVICE-FEIGN和SERVICE-RIBBON都是注册到eureka中的服务名称,通过访问url :localhost:rureka端口 地址可以查看到注册到注册中心的服务名称。

通过配置,以/api-a/ 开头的请求都转发给SERVICE-FEIGN服务;以/api-b/开头的请求都转发给SERVICE-RIBBON服务

启动顺序:

1.启动server-eureka注册中心

2.启动服务client:eureka-client

3.启动服务消费者:service-ribbon和service-feign

4.启动zuul工程:service-zuul

打开浏览器,输入url:http://localhost:1111/ 可以查看eureka注册中心注册的服务

分别输入url:http://localhost:9003/api-a/test?name=haohttp://localhost:9003/api-b/test?name=hao 可以看到请求分别调用了对应的服务。

注:spring cloud zuul已经帮我们做了默认配置。默认情况下,Zuul会代理所有注册到Eureka Server的微服务,并且Zuul的路由规则如下:
http://ZUUL_HOST:ZUUL_PORT/微服务在Eureka上的serviceId/**
会被转发到serviceId对应的微服务。也就是当相同一个项目实现了集群布置切注册的服务名一样时,在zuul中会自动实现负载均衡的功能。

附上项目源码:https://pan.baidu.com/s/1pLmPxxh
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息