您的位置:首页 > 编程语言 > Java开发

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({});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息