springcloud用来做网关的组件有哪些?
1、gateway。根正苗红,能打胜仗。底层是基于Netty(特点是通信快)实现的。
2、zuul。由Netflix维护,没有被springcloud指定为官方的网关组件。
gateway能用来做什么?
1、路由选址。根据path匹配到对应的服务。比如商品订单服务。
2、负载均衡。商品订单服务背后可能存在成百上千个的节点,也就是说集群,所有节点共同提供商品订单服务相关的api调用,这个时候应该把请求发送到哪一个节点呢?答案依据负载均衡策略发送到对应的节点。用哪个组件来实现负载均衡呢?答案是ribbon。
3、限流。发送请求的第一站,比起把服务请求下方到具体的接口层,在网关限流,把请求在网关层丢弃掉,效率更高。
4、鉴权。权限验证。
概念:
1、qps。queries per second。每秒查询数量,并发请求的数量。
2、rps。requests per second。每秒请求数。
共同点:都是指单位时间内当前接口被访问的数量。
首先,gateway必须依赖eureka的服务注册,从注册中心拉取所有节点的信息。lb:FEIGN-CLIENT中feign-client指的是注册中心的一个服务,在断言规则成功匹配的情况下请求成功地与路由规则匹配,将请求转发到对应的微服务,与此同时,利用了负载均衡策略(feign-client可能对应多个节点喔)。locator.enable=true就是用来从注册中心拉取其它服务的(拉取serviceId,地址等),换而言之,为注册中心正常注册的服务配置路由规则,配置完之后,就可以通过/serviceId/methodName访问对应接口了。
gateway通过actuator查看所有路由:localhost:currentGatewayPort/actuator/gateway/routes
gateway通过actuator添加、修改、删除路由规则:
添加链接:localhost:currentGatewayPort/actuator/gateway/routes/routeid(路由规则的唯一id)。post请求方式,设置body和请求头Headers (Content- Type=application/json(用来接收json))
访问路由规则,关于地址匹配的断言规则是这么说的:当访问请求后面是以dynamic开头,那么这些请求都会匹配上这个规则。在链接中把feign-client(注册中心的服务名称)(由于locator设置为true,为service设置了路由规则,所以/serviceId的请求会被转发到指定的microservice)换成dynamic(匹配到对应的路由规则,按照负载均衡将请求转发到注册中心的某个服务。),请求会被转发到feign-client。由于dynamic这个前缀对于feign-client服务来说时多余的,仅仅用来匹配路由规则,所以需要使用filter的stripPrefix=1将path中的第一个前缀切断。
删除:将请求方式改成delete,删除body,根据链接后面的路由id删除指定路由。
修改:将请求方式改成put或者post,路由id不变(id存在则编辑),编辑body中的内容。
为网关配置断言Path和filter:
断言:用来匹配请求,符合断言规则的请求会被转发到uri对应的microservice,同时实现负载均衡。
filter:不同于断言,filter既能看又能玩,可以更改请求path(stripPrefix),可以设置响应头中的参数等。
为gateway配置断言和filter的方式有哪几种?
两种。双刀流。既可以通过yml配置,也可以通过java配置。区别在于用java配置时,不需要指定route-id,而通过actuator/gateway/routes查看所有路由请求时,是可以看到自动生成的id的。
通过java的方式设置断言:
1、before。启动项目之后,指定时间之前,路由会生效。未生效会直接not found
2、after。启动项目之后,路由生效。可以用来做秒杀。规定时间之后才可以进行秒杀操作。
3、between。时间范围内路由才生效。用来做抢红包。之外的时间是not found。
701

被折叠的 条评论
为什么被折叠?



