myJavaSE

springcloud之zuul和config-server

1.zuul相关介绍

zuul是springcloud的组件之一,用来作为请求的网关:

所有从设备或网站来的请求都会经过Zuul到达后端的Netflix应用程序。作为一个边界性质的应用程序,Zuul提供了动态路由、监控、弹性负载和安全功能。Zuul底层利用各种filter实现如下功能:

  • 认证和安全 识别每个需要认证的资源,拒绝不符合要求的请求。
  • 性能监测 在服务边界追踪并统计数据,提供精确的生产视图。
  • 动态路由 根据需要将请求动态路由到后端集群。
  • 压力测试 逐渐增加对集群的流量以了解其性能。
  • 负载卸载 预先为每种类型的请求分配容量,当请求超过容量时自动丢弃。
  • 静态资源处理 直接在边界返回某些响应。

zuul的底层过滤器有前置过滤器pre,后置过滤器post,错误过滤器 errorFilter,还可以之定义过滤器

1.实现zuul,搭建一个网关

1.导入zuul的依赖

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

 2.在主配置类上面开启网关反向代理

@EnableZuulProxy

3.配置配置文件yml,需要将网关模块注册到注册中心eureka

eureka:
client:
serviceUrl:
defaultZone: http://localhost:1010/eureka/
instance:
prefer-ip-address: true #定义ip到注册中心注册
instance-id: zuul-client:1020 #使用id的方式注册
server:
port: 1020
spring:
application:
name: zuul-client #给网关客户端在erueka服务器取个名字
zuul:
ignored-services: "*"
routes:
systemmanage-server: "/system/**"

4.自定义网关,写一个自定义类,继承ZuulFilter,覆写四个方法,一个是顺序,一个是类型,一个是返回boolean结果,一个是根据boolean结果的值判断是否执行run()方法
false,不执行run方法,true执行run方法
@Component
public class LoginCheckFilter extends ZuulFilter {
@Override
public String filterType() {
return PRE_TYPE;
}

@Override
public int filterOrder() {
return 3;
}

@Override
public boolean shouldFilter() {
//获取上下文对象
RequestContext currentContext = RequestContext.getCurrentContext();
//获取请求对象
HttpServletRequest request = currentContext.getRequest();
//通过请求对象获取资源路径
String requestURI = request.getRequestURI();
//判断请求路径是否包含login
if(requestURI.toUpperCase().contains("LOGIN")){
return false;
}
return true;//返回true执行下面的run方法
}

@Override
public Object run() throws ZuulException {
//获取上下文对象
RequestContext currentContext = RequestContext.getCurrentContext();
//获取请求对象
HttpServletRequest request = currentContext.getRequest();
    //获取响应对象
HttpServletResponse response = currentContext.getResponse();
    //设置返回类型和编码
response.setContentType("application/json;charset = utf-8");
Map<String,Object>jsonMap = new HashMap<>();
jsonMap.put("success", false);
jsonMap.put("msg", "请先登录。。。。");
//获取请求头
String header = request.getHeader("x-token");
if(StringUtils.isBlank(header)){
//
try {
response.getWriter().print(JSON.toJSONString(jsonMap));//这里使用了阿里巴巴的fastjson包,帮我们处理返回json,将对象转为json字符串
} catch (IOException e) {
e.printStackTrace();
}
currentContext.setSendZuulResponse(false);//如果是false,直接返回响应结果,下面的代码再不执行
}
return null;
}
}

2.使用配置中心config-server

介绍:配置中心的作用是从远程仓库中拉取到指向配置中心的配置文件,而配置中心又是指向远程仓库的,所以微服务根据,在远程厂库的配置文件的名字,就能够通过配置中心这个桥梁拉取到自己的配置。

1.要使用远程仓库,需要使用第三方的仓库如github,或者码云,如何在码云上面创建仓库就不再叙述了

2.在项目里面新建一个配置中心模块 config-server

3.导入依赖

<dependencies>
<!-- Config-Server 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

4.主配置类开启配置中心
@EnableConfigServer
5.配置yml文件,指向远程仓库
instance:
prefer-ip-address: true #使用ip地址注册
instance-id: config-server #指定服务的id
server:
port: 5000
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://gitee.com/huang__ming/springcloud-config.git #指向码云仓库,这个就是远程仓库的地址
username: 1214491701@qq.com
password: asd19930256

2.搭建配置中心的客户端

1.导入依赖

<!-- Config-Client 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>

2.修改application.yml文件文件名为bootstrap.yml

3.将客户端的配置,配置到码云的仓库中(在仓库中创建一个文件zuul-client-dev.yml)

eureka:
client:
serviceUrl:
defaultZone: http://localhost:1010/eureka/
instance:
prefer-ip-address: true #定义ip到注册中心注册
instance-id: zuul-client:1020
server:
port: 1020
spring:
application:
name: zuul-client
zuul:
ignored-services: "*"
routes:
systemmanage-server: "/system/**"

4.配置修改文件名后的yml文件,路径指向配置文件的地址

spring:
cloud:
config:
uri: http://localhost:5000
name: zuul-client
profile: dev



5.测试,启动注册中心服务,启动配置中心微服务,启动网关微服务,浏览器输入localhost:5000/zuul-client.dev.yml,如果能够读取到远程仓库的
文件内容说明配置中心集成成功



posted on 2019-12-30 19:31  myJavaSE  阅读(313)  评论(0编辑  收藏  举报

导航