01 注册eureka
02 eureka后台监控加许可权
03 feign使用
04 引用common元件
05 hystrix 应用
06 ribbon应用
ribbon是针对微服务之间的负载均衡机制,如果从外部进来的请求需要访问内部服务的时候,就需要zuul来帮助我们了。他可以帮我们做外部访问的负载均衡和过滤的工作。
使用者请求zuul的时候会先经过pre过滤器,然后再通过route过滤器,他会通过路由配置把请求汇入到对应的微服务,然后再通过post过滤器,最后返回给使用者。
建立zuul 服务
先建立一个zuul的专案,一路向导达到目的。然后就是三板斧。
依赖项,pom.xml 配置
org.springframework.boot
spring-boot-starter-parent
1.5.6.RELEASE
1.8
Dalston.SR4
org.springframework.cloud
spring-cloud-starter-eureka
org.springframework.cloud
spring-cloud-starter-zuul
配置项,application.yml。即然zuul是一个闸道器就会拦截外部浏览器对服务的请求,起到了过滤器的作用。制定一个zuul的名字,埠号,以及要注册的服务中心。
spring:
application:
name: demo-gateway-zuul
server:
port: 7600
eureka:
client:
service-url:
defaultZone: http://root:[email protected]:7776/eureka/
zuul:
routes:
demo-eureka-client-consumer: /user/**
这里要注意的是,在zuul.routes的定义中需要把访问服务的名字和路径定义起来。也就是说当访问 demo-eureka-client-consumer 的/user/ 路径的时候就可以被服务感知。
启动项
在启动的class上面打上annotation,告诉程式这个作为zuul的gateway。测试结果
测试之前再回顾一下,我们之前的服务器埠号。eureka server 7776
provider 8081
provider2 8083
consumer 8082
zuul 7600
现在我们要通过访问zuul的7600 埠,然后由zuul帮我们路由到 consumer 8082 上面去。
这里我们通过zuul的7600 服务,路由从原来的userlogin 更改成了 /user/userlogin zuul帮我们路由到了 consumer的 /userlogin 上面去了。
回头看看 zuul也注册到中心了。
过滤器filter 测试
这里建立一个filter的class,继承于ZuulFilter主要是选择过滤器的型别,优先级,是否生效,过滤器执行的内容,如下。
@Component
public class PreFilter extends ZuulFilter{
@Override
public String filterType() {//过滤器型别
return FilterConstants.PRE_TYPE;
}
@Override
public int filterOrder() {//同类型过滤器优先级,数字越小优先级越高
return 0;
}
@Override
public boolean shouldFilter() {//过滤器是否生效
return true;
}
@Override
public Object run() {//出发过滤条件时执行的内容
RequestContext context = RequestContext.getCurrentContext();
HttpServletRequest request = context.getRequest();
String token = request.getHeader("token");
if (token == null || token.equals("")){
context.setSendZuulResponse(false);
context.setResponseStatusCode(401);
context.setResponseBody("{"message":"no permission, need to login!"}");
return "access denied";
}
return "access succeed";
}
}
然后再执行zuul,并且通过zuul访问consumer 服务。
访问的时候如果token为空那么,访问失败并且提示资讯如下。
然后,我们在token中随便填写一些内容。
得到正确的结果。
搞定收工。
如果喜欢点个关注,转发一下。
谢谢各位。