前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springcloud config分布式配置中心 实现动态路由分布式配置中心(configServer)zuul动态路由网关

springcloud config分布式配置中心 实现动态路由分布式配置中心(configServer)zuul动态路由网关

作者头像
用户5899361
发布2020-12-07 14:25:56
3470
发布2020-12-07 14:25:56
举报
文章被收录于专栏:学习java的小白

分布式配置中心(configServer)

pom依赖

代码语言:javascript
复制
<!--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>

启动类

代码语言:javascript
复制
@EnableConfigServer
@SpringBootApplication
@EnableEurekaClient
public class ConfigServerStar {

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

}

配置文件

注意:这里配置文件名字使用bootstrap.yml

代码语言:javascript
复制
###服务注册到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
   ###解决中文乱码
  http:
        encoding:
          charset: UTF-8
          enabled: true
          force: true
####端口号
server:
  port: 9999

zuul动态路由网关

pom依赖

代码语言:javascript
复制
   <!--网关依赖-->
        <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>

启动类

代码语言:javascript
复制
@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();
    }

网关过滤器

代码语言:javascript
复制
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;
    }
}

网关处理异常

代码语言:javascript
复制
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

代码语言:javascript
复制
###服务注册地址
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: "*"
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分布式配置中心(configServer)
    • pom依赖
      • 启动类
        • 配置文件
          • 注意:这里配置文件名字使用bootstrap.yml
      • zuul动态路由网关
        • pom依赖
          • 启动类
            • 网关过滤器
              • 网关处理异常
                • 配置文件
                  • 注意:跟configServer一样配置文件名必须使用bootstrap.yml
              相关产品与服务
              微服务引擎 TSE
              微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档