springcloud (这里测试zuul)+携程Apollo配置中心实现自动刷新

第一步:搭建apollo

1、去GitHub地址:https://github.com/ctripcorp/apollo/releases地址下载安装包,然后解压,在apollo-quick-start\sql目录下有两个sql,导入到mysql中(5.6.5++)

2、打开demo.sh文件,把下面的配置改成自己的数据库的用户名和密码

apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=admin

# apollo portal db info
apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=root
apollo_portal_db_password=admin

3、第2个步骤改完成后,启动demo.sh文件(cmd中输入./demo.sh start)

4、访问http://localhost:8070,用户名默认apollo,密码amin,然后新建一个项目填写appId(这个appId与项目中的app.id是一致的)

第二步:搭建项目(这里写了三个项目,一个是注册中心、一个是网关zuul、另一个是被调用zuul转发调用的微服务)

网关zuul项目中添加的依赖apollo依赖


    com.ctrip.framework.apollo
    apollo-client
    1.3.0


    com.spotify
    apollo-core
    1.11.0

application.properties中配置

app.id=hello-zuul
apollo.meta=http://localhost:8080
#Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候依然能从本地恢复配置,不影响应用正常运行。本地缓存路径默认位于以下路径,所以请确保/opt/data或C:\opt\data\目录存在,也可以自定义,如下
apollo.cacheDir=C:\\Users\\yang\\Desktop
#zuul.routes.hello-consumer-openfeign.path=/api/**
#zuul.routes.hello-consumer-openfeign.serviceId=hello-consumer-openfeign

application.yml中配置

server:
  port: 10000
spring:
  application:
    name: hello-zuul
eureka:
  client:
    register-with-eureka: false #网关不用注册到注册中心中,因为没其他微服务调用他
    fetch-registry: true #这个必须是true fetchRegistry打开才能从eureka拉取服务列表
    service-url:
      defaultZone: http://localhost:7000/eureka/
zuul:
  ignored-services: "*" #意味着http请求比如 "/myusers/101" 将跳转到 "/101"
#  routes:
#    hello-consumer-openfeign:
#      path: /api/**
#      serviceId: hello-consumer-openfeign
#  host:
#    connect-timeout-millis: 3000
#    socket-timeout-millis: 3000

主配置类中添加

@EnableApolloConfigz注解

如果要不重启就自动刷新需要如下配置

@Component
@Slf4j
public class ApolloConfigChanged implements ApplicationContextAware {
    private ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext=applicationContext;
    }
    @ApolloConfigChangeListener
    private void someChangeHandler(ConfigChangeEvent changeEvent) {
        for (String key : changeEvent.changedKeys()) {
            ConfigChange change = changeEvent.getChange(key);
            log.info("Found change - {}", change.toString());
        }
        // 更新相应的bean的属性值,主要是存在@ConfigurationProperties注解的bean
        this.applicationContext.publishEvent(new EnvironmentChangeEvent(changeEvent.changedKeys()));
    }
}

这样就配置完成了,其他eureka、zuul的配置自行搭建

启动项目测试就ok了

转载于:https://my.oschina.net/u/3962987/blog/3015282

你可能感兴趣的:(springcloud (这里测试zuul)+携程Apollo配置中心实现自动刷新)