Spring cloud实战-Zuul如何动态负载和服务发现扩容
2017-08-15 19:30
567 查看
Zuul、Fegin、Rebbion、Eureka一条龙
很多人都自然而然把zuul当成nginx那样来在配置写死节点配置来。实际上zuul和eureka的是可以完美配合,完全可以基于服务名的注册和发现,来动态的实现服务的
动态负载和
动态注册,从而达到
不需要重启zuul即可达到动态扩容的。下文将介绍
静态配置路由表和从
Eureka发现服务的两种方式来加强Zuul的使用。
项目地址:
AG-Admin:http://git.oschina.net/geek_qi/ace-securityGateWay搭建
Maven依赖
<dpendency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session</artifactId> <version>1.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency>
基于Eureka的application.yml(关键)
spring: application: name: ace-gate thymeleaf: mode: LEGACYHTML5 cache: false redis: database: 1 host: 127.0.0.1 pool: max-active: 20 server: port: 8765 #启动端口 #开启动态网关服务发现 ribbon: eureka: enabled: true #配置zuul路由表,静态路由 #zuul: # #prefix: /techouse #为zuul设置一个公共的前缀 # #ignoredServices: '*' # routes: # ace-admin: #随便定义,当不存在serviceId时,默认该值为serviceId(就是注册服务的名称,属性spring.application.name) # path: /test/** #匹配/test/** 均路由到cloud-client #基于静态路由节点的ribbon负载均衡配置 #ace-admin: # ribbon: # listOfServers: 127.0.0.1:8767 eureka: instance: statusPageUrlPath: ${management.context-path}/info healthCheckUrlPath: ${management.context-path}/health client: serviceUrl: defaultZone: http://localhost:8761/eureka/ security: user: name: admin password: admin role: USER #避免第一次调用失败 hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 5000 #请求和响应GZIP压缩支持 feign: compression: request: enabled: true mime-types: text/xml,application/xml,application/json min-request-size: 2048 response: enabled: true
启用Zuul、Fegin、Eureka注解
@SpringBootApplication @EnableEurekaClient @EnableDiscoveryClient @EnableFeignClients @EnableZuulProxy @EnableRedisHttpSession(redisFlushMode = RedisFlushMode.IMMEDIATE) public class GateBootstrap { public static void main(String[] args) { SpringApplication.run(GateBootstrap.class, args); } }
Zuul filter拦截示例代码
@Component public class SessionAccessFilter extends ZuulFilter { private final Logger log = LoggerFactory.getLogger(SessionAccessFilter.class); @Autowired private SessionRepository<?> repository; @Autowired private IUserService userService; @Override public String filterType() { return "pre"; } @Override public int filterOrder() { return 1; } @Override public boolean shouldFilter() { return true; } @Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); HttpSession httpSession = ctx.getRequest().getSession(); if (不符合权限){ setFailedRequest("<h1>Forbidden!</h1>",403); } return null; } /** * 路由重定向 * * @param body * @param code */ private void setFailedRequest(String body, int code) { log.debug("Reporting error ({}): {}", code, body); RequestContext ctx = RequestContext.getCurrentContext(); ctx.setResponseStatusCode(code); if (ctx.getResponseBody() == null) { ctx.setResponseBody(body); ctx.setSendZuulResponse(false); throw new RuntimeException("Code: " + code + ", " + body); //optional } } }
访问网关地址示例
[ip]:[zuul port]/[Eureak 注册服务]/[资源路径]
Zuul兼容动态注册和静态路由表
核心思路
基于Eureka上注册另一个zuul,通过主的zuul gate way来分流到另外一个zuul,从而兼容静态路由的情况。相关文章推荐
- 如何使用Spring Cloud – 简单服务流程(服务发现与API调用)
- 蛙蛙推荐:作一个支持过载自适应和动态扩容的负载均衡服务
- 蛙蛙推荐:作一个支持过载自适应和动态扩容的负载均衡服务
- [WCF-Discovery] 实例演示:如何利用服务发现机制实现服务的“动态”调用?
- 如何使用Spring Cloud – 简单服务流程(服务发现与API调用)
- Spring Cloud(一)服务的注册与发现(Eureka)
- 增长黑客实战推理:他们是如何发现30和1/3这两个数字支点的?
- Spring Cloud 之服务注册&发现
- 关于服务发现、Feign、Zuul 以及docker之间的依赖
- 微服务实战(四):服务发现的可行方案以及实践案例
- Kubernetes如何使用kube-dns实现服务发现
- Java Web实战02--Maven学习以及如何建立动态网页工程
- Spring cloud笔记 - 服务注册与发现篇
- 微服务实战——Spring Cloud 第三篇 为Eureka Server添加HTTP Basic认证
- Spring cloud实现服务注册及发现
- Spring Cloud构建微服务架构服务注册与发现
- 微服务实战(四):服务发现的可行方案以及实践案例
- 微服务采用服务发现机制,不用负载均衡的原因
- Spring Cloud构建微服务架构(一)服务注册与发现
- [置顶] osgi实战项目(osmp)一步一步玩转osgi之服务发现与服务路由(5)