这个章节是关于 SpringCloud :高可用的分布式配置中心
在我们之前的配置文件中,都是定义的本地的位置,例如说我之前写的这个
可以看到他定义了一个本地地址,那假如说我们想启用多个相同的服务又不想冲突,是怎么做到的,像上面做的,改一个ip地址再运行一遍,假如说我们可以用名字来代替ip地址,多个服务在上面叫做同一个名字,到时候也不用改IP地址,这样在做负载均衡的时候是不是就会好很多,这就是高可用的一个体现
事实上,如果引用都在本地上,服务之间相互引用,当服务足够多的时候,会出大问题
假如说把配置放到网上呢,那我能想到的好处有三个
1、容易管理,专门建一个仓库管理配置文件肯定比你的那个好看
2、不用重启生效,在网上的配置文件修改你在下一次获取的时候(可手动)就能生效,用不着重启服务
3、就是可以用一些其他人的配置吧,像什么七牛的短信服务啊等等
好处说了这么多,怎么做呢?
1、git仓库里头写配置文件
2、建一个config-server
3、建一个config-client
4、把这两个东西作为Eureka-Client注入到server里头
github上新建配置文件仓库 https://github.com/Crecendow/SpringcloudConfig
例如说这个文件 config-client-dev,之后我们会获取到它。
foo = foo version 21
democonfigclient.message=hello spring io
新建config-server
写主程序
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
写配置文件
spring.application.name=config-server
server.port=8888
spring.cloud.config.server.git.uri=https://github.com/Crecendow/SpringcloudConfig
spring.cloud.config.server.git.searchPaths=respo
spring.cloud.config.label=master
spring.cloud.config.server.git.username=liubiubiu123@qq.com
spring.cloud.config.server.git.password=**************
eureka.client.serviceUrl.defaultZone=http://localhost:8889/eureka/
这是个什么东西类,
spring.cloud.config.server.git.uri 仓库地址
spring.cloud.config.server.git.searchPaths 仓库的具体文件夹
spring.cloud.config.label 指定了分支
然后是你登录的用户名和用户密码
最后一个是 你注册到本地的server的地址,这个前面的项目也有
新建Config-Client
写主程序
@SpringBootApplication
@RestController
@EnableDiscoveryClient
@EnableEurekaClient
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
@Value("${foo}")
String foo;
@RequestMapping(value = "/hi")
public String hi(){
return foo;
}
}
写配置文件
spring.application.name=config-client
spring.cloud.config.label=master
spring.cloud.config.profile=dev
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=config-server
server.port=8881
eureka.client.serviceUrl.defaultZone=http://localhost:8889/eureka/
可以看到这边不再使用uri, 那uri也是配置的一种方式,git远程配置也是配置的一种方式,两种方式都可以达到最后的目的,而uri就没有像我们这个一样的优点了。
像往常一样建一个Eureka-Server
写主程序
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
写配置文件
server:
port: 8889
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
我们可以运行 localhost://8889
再运行 localhost://8881/hi
纵观整个项目
我们将配置文件的写入的方式从本地的地址变成了 网上仓库的配置的形式,服务之间相互调用也不再是依靠地址而是依靠 application的名称。除此之外,微服务启动的顺序也有讲究,它们依次是
Eureka Server ---> Config Server ----> Client Server , 启动顺序错误,是会报错的
Git仓库的命名不要乱写,否则会找不到相关的配置文件
你像这个,
config-client-dev.properties
就很nice