zuul网关

首先新建一个项目,引入zuul依赖和eureka client依赖

 

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

然后配置propertise文件

spring.application.name=zuul-test
server.port=84
#这里的地址是provider去寻找服务的地址和端口
eureka.client.service-url.defaultZone=http://eureka1.com:7001/eureka/

在项目入口还有加上注解@EnableZuulProxy

@SpringBootApplication
@EnableZuulProxy
public class ZuulTestApplication {

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

}

这样zuul的服务就基本搭好了,我们把之前弄好的eureka服务和consumer,provider这三个服务都开起来,我们来试试调用zuul服务器(我这里是84端口)然后/服务名/url,居然调通了!到这里最简单的网关就搭好啦。

接下来我们聊聊网关

我们没用网关的时候,用户是直接请求consumer,然后consumer发送http请求provider,consumer可以对多个provider根据不同的负载均衡算法做负载均衡。那问题来了,如果多个consumer想做负载均衡怎么办呢?,我们不可能让用户记住多个不同的consumer的ip地址呀,那么我就要新起一个web服务(不是web服务没办法去接收用户请求),这个服务对外网就一个ip,而consumer,provider全是内网ip,这个服务就接收所有用户的请求,然后把eureka里所有的服务列表全部拉取到这个服务中,然后根据服务列表,服务名,我们就可以对服务列表里的服务做负载均衡了。其实这个服务叫网关,上面说的可以根据uri定位某个服务,某个功能就,就是网关的一个功能“路由”。

网关是介于客户端和微服务的中间层,zuul就是一个微服务网关(业务网关),其实和nginx也是业务网关,他们两是一模一样的,当然好基于四层网络模型的Lvs,lvs是流量网关(它只有对请求进行负载均衡转发,但是它并不能做拦截或者其他业务),可以给业务网关做负载均衡,这里就暂时不说了,但是zuul因为是依赖于用的tomcat,所以速度相对于nginx较慢,它里面有很多不同的过滤器,这些过滤器可以完成很多功能。

  1. 进行路由分发。
  2. 身份认证与安全,拦截不合法的请求。
  3. 在所有请求的入口处监控。
  4. 动态路由,将请求动态的分发到不同的后端集群。
  5. 负载均衡。
  6. 限流,对系统整体的限流。
  7. 熔断降级。

我们把provider(端口82和92)和consumer(端口83和93)都启动多个服务。在eureka里面就可以清晰的看到啦。

下面就是调用网关后的结果,我们可以疯狂刷新,我们就能看到consumer端口号一直在变,说明网关自动帮我们负载均衡,那provider端口一直在变说明feign里的ribbon在帮我们自动的负载均衡啦!!!!!默认是轮询负载策略。

ZuulFilter

网关其实就是用一个个不同的filter实现的,在ZuulServlet中能看到有4种过滤器:preRoute,route,postRoute,errorRoute.

pre:这种过滤器在请求被路由前执行,所以可以用这种过滤器进行鉴权,选择微服务,记录日志和限流。

route:这种过滤器是将请求路由到微服务上,所以可以用来构建请求。

post:这种是用于调用微服务之后,所以可以用做记录日志,添加header等。

error:这个过滤器是当其他阶段发生错误就会执行此过滤器。

public class myFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return null;
    }

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

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

    @Override
    public Object run() throws ZuulException {
        return null;
    }
}

自定义filter直接集成zuulFilter,然后重写上面的几个方法,filterType是用来设置过滤器的类型,就是上面说的那四种可以用FilterConstants获取常量值。filterOrder就是执行顺序,数字越小越先执行。shouldFilter就是判断是否执行此过滤器,true为执行此过滤器,false直接跳过。而我们的业务逻辑都会写在最后面的run方法中。

链路追踪

首先我们先配置好sleuth框架,引入sleuth引用,和zipkin依赖,这个东西需要配置到每一个要监控的服务上,然后zipkin要配置properties文件。

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>
spring.zipkin.base-url=http://localhost:9411
spring.sleuth.sampler.rate=1

我们还需要下载个zipkin的jar包

下载好之后我们执行这个jar包,启动zipkin服务

启动成功后,我们就可以直接访问配置文件里面设置的url了,http://localhost:9411

请求的整个过程里面每个节点信息,哪里有问题,里面都能查到。所以zipkin服务就是开启后,所以配置了zipkin的节点都会去上报自己的情况,然后zipkin再做链路追踪的信息统计。

以上就是网关和链路追踪的一些基本用法,谢谢

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值