springcloud config分布式配置中心 实现动态路由

分布式配置中心(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: "*"

 

转载于:https://my.oschina.net/u/3535099/blog/3056385

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值