下载安装
-
下载地址:https://developer.hashicorp.com/consul/install?product_intent=consul
-
解压出来只有个 exe 文件,在这个目录打开 shell,
consul --version
查看版本,consul agent -dev
开发模式启动启动后访问 localhost:8500 能正常访问到 consul 界面
小试牛刀
-
工程导入依赖
<!--SpringCloud consul config 读取配置需要 --> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-config</artifactId> </dependency> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency><!--SpringCloud consul discovery 注册服务需要 --> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions> </dependency>
-
启动类使用注解
@EnableDiscoveryClient // 当前工程注册到 consul @SpringBootApplication public class SpringbootApplication {public static void main(String[] args) {SpringApplication.run(SpringbootApplication.class,args);} }
-
配置文件,这里需要两个配置文件,一个常规的 application.xml,里面放 springboot 的配置,比如数据源、mapper、mvc 等,consul 作为配置中心需要 bootstrap.yml。application.yml 就不贴了,贴一下 bootstrap.yml
spring:application:name: my-consul-test-service# consul 的配置放这里cloud:consul:host: localhostport: 8500discovery:service-name: ${spring.application.name}config:profile-separator: '-' # 工程和环境profile连接符是英文逗号‘,’太反人类了,至少国内没有这样的,这里改成短横线format: YAML
-
启动服务,consul 能看到 my-consul-test-service
-
到 consul 添加一个配置,看是否能读取到
-
consul 的配置很特殊,总体格式为
config/服务,[环境]/data
,分为三层: config、服务、data -
比如 my-consul-test-service 服务,如果有两个环境一个是 dev,一个是 prod,就要这样创建
/config/my-consul-test-service,dev/data
、/config/my-consul-test-service,prod/data
。服务与环境之间是逗号,我们在 pom 里面改成了 - -
创建 data
-
-
data 里就是真正的配置数据,随便写一个
-
工程中写个 controller,读取配置文件
@RefreshScope // 动态刷新(默认55秒刷新一次,如果想实时,可以修改默认刷新时间) @GetMapping(value = "/testGetConfig") public String testGetConfig( @Value("${test.username}") String username){return username; }
-
访问接口测试
-
每次重启配置文件都会丢失,要把配置文件持久化下来才行,增加个配置就行。这玩意应该不是主流吧,感觉还是 nacos 是主流,服务注册不上去都还能跟源码,这个玩意不是java语言写的,好像是 go 吗?出问题看不了源码