Consul
consul,微服务注册中心、配置中心用法
Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框架、分布式一致性协议实现、健康检查、Key/Value 存储(配置中心)、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等),使用起来也较为简单。
Consul 使用 Go 语言编写,因此具有天然可移植性(支持Linux、Windows 和 Mac OS);安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。
主要的功能是注册中心和配置中心;
下载完成后解压
在路径上输入cmd,打开 命令提示符 输入 consul.exe agent -dev;启动consul
启动成功后,访问路径:http://127.0.0.1:8500
Services(服务中心):向conusl中注册的服务都会显示在这上面;
Key/Value(配置中心):存放服务配置文件;
缺点:通过 consul.exe agent -dev 启动的服务,当关闭命令提示符,consul就会被关闭,而且服务中心和配置中心都会被清除,这样就无法永久保留;
持久化
其实就是把consul 注册成一个服务在后台运行;
在consul.exe 目录下创建一个 XX.bat文件
在consul_start.bat 文件中输入以下命令,然后运行
@echo.service startup......
@echo off
@sc create Consul binpath= "E:\java\consul\consul.exe agent -server -ui -bind=127.0.0.1 -client=127.0.0.1 -bootstrap-expect 1 -data-dir E:\java\consul\data"
@net start Consul
@sc config Consul start= AUTO
@echo.Consul starting success!
@pause
说明
sc create :创建windows服务的命令
Consul :是我们的服务名
binPath:程序的一些路径和别的配置
-client:改成自己的ip
-data-dir:数据持久化的数据存放在哪
运行以后,就可以看到consul被注册到服务中,这样就可以保证consul一直在后台运行了;
SpringBoot 集成 consul
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
启动类上添加 @EnableDiscoveryClient
主要作用就是能被服务中心发现并且注册
@SpringBootApplication
@EnableDiscoveryClient
public class TextApplication {
public static void main(String[] args) {
SpringApplication.run(TextApplication.class, args);
}
}
配置,consul的配置信息一般写在 bootstrap.properties 文件中
application.properties
server.port=8090
server.address=127.0.0.1
bootstrap.properties
spring.application.name=text
# consul 服务地址
spring.cloud.consul.host=127.0.0.1
# consul 服务端口
spring.cloud.consul.port=8500
# 服务 ip
spring.cloud.consul.discovery.hostname=192.168.96.138
# 实例名称
spring.cloud.consul.discovery.service-name=${spring.application.name}
# 是否使用ip地址注册(开启后可以在web界面看到实例ip)
spring.cloud.consul.discovery.prefer-ip-address=true
# 注册的实例id 必须唯一
spring.cloud.consul.discovery.instance-id=${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
# 健康检测 API
spring.cloud.consul.discovery.health-check-path=/actuator/health
# 健康检测间隔时间
spring.cloud.consul.discovery.health-check-interval=10s
# 使用心跳检查push机制定期向consul server汇报自身存活情况,逾期没有汇报则server认为异常
spring.cloud.consul.discovery.heartbeat.enabled=true
实例ID:必须是唯一,一般以 服务名称-服务ip-服务端口 做为ID 注册;除了在配置文件中 配置实例ID外,我们还可以通过代码的形式实现自定义配置;
@Configuration
public class ImccConsulServiceRegistry extends ConsulServiceRegistry {
private final Logger logger = LoggerFactory.getLogger(ImccConsulServiceRegistry.class);
private ConsulDiscoveryProperties properties;
private ConsulClient consulClient;
public ImccConsulServiceRegistry(ConsulClient client, ConsulDiscoveryProperties properties, @Autowired(required = false) TtlScheduler ttlScheduler, HeartbeatProperties heartbeatProperties) {
super(client, properties, ttlScheduler, heartbeatProperties);
this.properties = properties;
this.consulClient = client;
}
@SneakyThrows
@Override
public void register(ConsulRegistration reg) {
//获取服务器的ip
String address = Inet4Address.getLocalHost().getHostAddress();
NewService newService = reg.getService();
newService.setAddress(address);
newService.setId(reg.getService().getName() + "-" + address.replace(".", "-") + "-" + reg.getService().getPort());
logger.info("consul注册服务,NewService:{}", newService.toString());
super.register(reg);
}
}
注册成功
配置中心
在bootstrap.properties 文件中 加入配置中心信息
# 开启配置中心
spring.cloud.consul.config.enabled=true
#环境分隔符,默认值 ",例如config/application,dev/data修改后是config/application-dev/data
spring.cloud.consul.config.profile-separator=-
# 配置文件的文件格式
spring.cloud.consul.config.format=properties
# 设置应用的文件夹名称
spring.cloud.consul.config.default-context=${spring.application.name}
# 配置文件的存储的根路径,默认为config
spring.cloud.consul.config.prefix=config
# 配置文件存储key的值,或者理解为文件的名称,默认为data
spring.cloud.consul.config.data-key=data
# 启用配置自动刷新
spring.cloud.consul.config.watch.enabled=true
# 刷新延迟时间,单位:秒
spring.cloud.consul.config.watch.wait-time=1
# 刷新频率,单位:毫秒
spring.cloud.consul.config.watch.delay=10000
consul 配置
测试
@RestController
@RequestMapping("/text")
public class TextController {
@Value("${value}")
private String value;
@GetMapping("/skyWalking")
public String skyWalking(){
return value;
}
}
更多推荐
所有评论(0)