第一步:搭建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依赖
<dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>com.spotify</groupId> <artifactId>apollo-core</artifactId> <version>1.11.0</version> </dependency>
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了