springcloud config分布式配置中心 实现动态路由
2019-06-02 07:01
1661 查看
分布式配置中心(configServer)
pom依赖
<!--spring-cloud 整合 config-server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> <version>2.1.2.RELEASE</version> </dependency> <!-- SpringBoot整合eureka客户端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
启动类
@EnableConfigServer @SpringBootApplication @EnableEurekaClient public class ConfigServerStar { public static void main(String[] args) { SpringApplication.run(ConfigServerStar.class, args); } }
配置文件
注意:这里配置文件名字使用bootstrap.yml
###服务注册到eureka地址 eureka: client: service-url: defaultZone: http://localhost:8100/eureka spring: application: ####注册中心应用名称 name: config cloud: config: server: git: ###git环境地址 uri: https://gitee.com/XXXXX/testspringcloud.git ####svn项目下属搜索目录 search-paths: - testspringcloud ####读取分支 label: master ####端口号 server: port: 9999
zuul动态路由网关
pom依赖
<!--网关依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <!--配置中心客户端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId> </dependency> <!--监控中心--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
启动类
@SpringBootApplication @EnableEurekaClient @EnableZuulProxy public class ZuulStar { public static void main(String[] args) { SpringApplication.run(ZuulStar.class,args); } // zuul配置能够使用config实现实时更新 @RefreshScope @ConfigurationProperties("zuul") public ZuulProperties zuulProperties() { return new ZuulProperties(); }
网关过滤器
import com.netflix.discovery.util.StringUtil; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Component public class TokeFilter extends ZuulFilter { /** * pre:可以在请求被路由之前调用 * route:在路由请求时候被调用 * post:在route和error过滤器之后被调用 * error:处理请求时发生错误时被调用 * */ @Override public String filterType() { return "pre"; } //过滤器执行顺序 @Override public int filterOrder() { return 0; } //是否开启过滤器 @Override public boolean shouldFilter() { return true; } @Override public Object run() throws ZuulException { RequestContext context=RequestContext.getCurrentContext(); HttpServletRequest request= context.getRequest(); HttpServletResponse response= context.getResponse(); String username=request.getParameter("userName"); if(StringUtils.isEmpty(username)){ context.setSendZuulResponse(false); context.setResponseBody("没有登录"); return null; } return null; } }
网关处理异常
import org.springframework.boot.web.servlet.error.ErrorController; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class ErrorHandlerController implements ErrorController { // 出异常后进入该方法,交由下面的方法处理 @Override public String getErrorPath() { return "/error"; } @RequestMapping("/error") public String error() { return "出现异常"; } }
配置文件
注意:跟configServer一样配置文件名必须使用bootstrap.yml
###服务注册地址 eureka: client: serviceUrl: defaultZone: http://localhost:8100/eureka/ ###api网关端口号 server: port: 80 ###网关名称 spring: application: #git上配置文件名称 name: zuul cloud: config: ####读取后缀 profile: dev ####读取config-server注册地址 discovery: #configServer在注册中心的别名 service-id: config enabled: true http: encoding: charset: UTF-8 enabled: true force: true ###默认服务读取eureka注册服务列表 默认间隔30秒 ###开启所有监控中心接口 management: endpoints: web: exposure: include: "*"
(adsbygoogle = window.adsbygoogle || []).push({});
相关文章推荐
- openresty--基于redis实现一个动态路由
- 利用vue-router的动态路由和路由传值实现同一模板渲染不同数据
- 使用spring的动态路由实现数据库读写分离【数据库读写分离(二) 】
- SpringCloud教程十:Zuul+Mysql实现动态路由
- ASP.NET路由系统实现原理:HttpHandler的动态映射
- Zuul动态路由及动态Filter实现
- Shell脚本实现动态配置IP与路由:解决嵌入式Android/Linux有线和无线网卡双网共存问题
- 使用Spring框架和AOP实现动态路由
- 用addRoutes实现动态路由
- Ngnix技术研究系列2-基于Redis实现动态路由
- rip动态路由以及三层交换实现DHCP服务实验【笔记|实验】
- vue+vue-router+vuex,利用vue-router2.2.0新增特性addRoutes实现路由动态加载,菜单动态加载,运用于后台管理系统,路由数据取自数据库
- vue iview实现动态路由和权限验证功能
- Spring Cloud Zuul实现动态路由(zuul设计)
- 使用Spring框架和AOP实现动态路由
- 使用spring的动态路由实现数据库负载均衡
- 利用quagga实现动态路由
- 在Pipeline中实现动态路由
- PaaS 7层动态路由的若干实现