《十次方》项目小札-10-微服务网关Zuul

1.核心功能

(1)Zuul、Ribbon以及Eureka相结合,可以实现智能路由和负载均衡的功能,Zuul能够将请求流量按某种策略分发到集群状态的多个服务实例。

(2)网关将所有服务的API接口统一聚合,并统一对外暴露。外界系统调用API接口时,都是由网关对外暴露的API接口。保护内部微服务单元的API接口。

(3)网关服务可以做用户身份认证和权限认证,防止非法请求操作API接口,对服务器起到保护作用。

(4)网关可以实现监控功能,实时日志输出,对请求进行记录。

(5)网关可以用来实现流量监控,在高流量的情况下对服务进行降级。

(6)API接口从内部服务分离出来,方便做测试。

2.使用

2.1.依赖与配置
   <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
   </dependency>
   <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
   </dependency>

yml配置:

server:
  port: 9012
spring:
  application:
    name: tensquare‐web #指定服务名
eureka:
  client:
    serviceUrl: #Eureka客户端与Eureka服务端进行交互的地址
      defaultZone: http://127.0.0.1:6868/eureka/
  instance:
    prefer‐ip‐address: true
zuul:
  routes:
    tensquare‐gathering: #活动
      path: /gathering/** #配置请求URL的请求规则
      serviceId: tensquare‐gathering #指定Eureka注册中心中的服务id
    tensquare‐article: #文章
      path: /article/** #配置请求URL的请求规则
      serviceId: tensquare‐article #指定Eureka注册中心中的服务id
    tensquare‐base: #基础
      path: /base/** #配置请求URL的请求规则
      serviceId: tensquare‐base #指定Eureka注册中心中的服务id
    tensquare‐friend: #交友
      path: /friend/** #配置请求URL的请求规则
      serviceId: tensquare‐friend #指定Eureka注册中心中的服务id
    tensquare‐qa: #问答
      path: /qa/** #配置请求URL的请求规则
      serviceId: tensquare‐qa #指定Eureka注册中心中的服务id
    tensquare‐recruit: #招聘
      path: /recruit/** #配置请求URL的请求规则
      serviceId: tensquare‐recruit #指定Eureka注册中心中的服务id
    tensquare‐spit: #吐槽
      path: /spit/** #配置请求URL的请求规则
      serviceId: tensquare‐spit #指定Eureka注册中心中的服务id
    tensquare‐user: #用户
      path: /user/** #配置请求URL的请求规则
      serviceId: tensquare‐user #指定Eureka注册中心中的服务id
    tensquare‐search: #用户
      path: /search/** #配置请求URL的请求规则
      serviceId: tensquare‐search #指定Eureka注册中心中的服务id

启动类添加注解 @EnableZuulProxy

package com.cloud.zuul;
 
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;
 
/**
 * Hello world!
 *
 */
@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy//开启网关功能,否则分发失败
public class ZuulApp {
	public static void main(String[] args) {
		SpringApplication.run(ZuulApp.class, args);
	}
}

3.Zuul过滤器

package com.tensquare.web.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

@Component
public class WebFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return "pre";
    }

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

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() throws ZuulException {
        //得到request上下文
        RequestContext currentContext = RequestContext.getCurrentContext();
        //得到request域
        HttpServletRequest request = currentContext.getRequest();
        //得到头信息
        String header = request.getHeader("Authorization");
        //判断是否有头信息
        if(header!=null && !"".equals(header)){
            //把头信息继续向下传
            currentContext.addZuulRequestHeader("Authorization", header);
        }
        return null;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值