简介
- Consul 是一套开源的
分布式发现
和配置管理系统
,由 HashiCorp 公司用 Go 语言开发 - 提供了微服务系统中的
服务治理
、配置中心
、控制总线
等功能。这些功能中的每一个都可以根据需要单独使用, 也可以一起使用构建全方位的服务网格总之 Consul 提供了一宗完整的服务网格解决方案。 - 它具有很多优点, 包括:
基于 raft 协议
,比较简洁
;支持健康检查
,同时支持HTTP
和DNS
协议支持跨数据中心
的WAN 集群 提供图形化界面
,跨平台,支持 Linux 、Max 、Windows
功能:
- 服务发现 : 提供HTTP 和 DNS 两种方式
- 健康检查 : 支持多种方式,HTTP,TCP,Docker。 Shell 脚本定制化
- KV 存储 : Key、Value 存储方式
- 多数据中心 : Consul 支持多数据中心
- 可视化WEB管理
下载、安装
官网地址 : https://learn.hashicorp.com/consul
下载地址 : https://www.consul.io/downloads.html
安装地址 :https://learn.hashicorp.com/consul/getting-started/install
命令
consul --version
:查看版本信息consul agent -dev
: 运行服务端
服务端
1、模块名 cloud-providerconsul-payment8006
2、pml.xml(web、actuator)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
3、yml 配置文件
server:
port: 8006
spring:
application:
name: consul-provider-payment
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
4、主启动
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain8006 {
public static void main(String[] args){
SpringApplication.run(PaymentMain8006.class,args) ;
}
}
@RestController
public class PaymentController {
@Value("${server.port}")
private String serverPort ;
@RequestMapping("/payment/consul")
public String paymentConsul(){
return "consul : " + serverPort + "\t" + UUID.randomUUID().toString() ;
}
}
5、测试
消费端
1、模块名 cloud-consumerconsul-order80
2、pml.xml(同服务端)
3、yml 配置文件
server:
port: 80
spring:
application:
name: consul-consumer-order
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
# hostname:
4、主启动
@SpringBootApplication
@EnableDiscoveryClient
public class OrderConsulMain80 {
public static void main(String[] args){
SpringApplication.run(OrderConsulMain80.class,args) ;
}
}
@Autowired
private RestTemplate restTemplate;
@Value("${server.port}")
private String serverPort;
private static final String INVOKE_URL = "http://consul-provider-payment";
@RequestMapping("/consumer/payment/consul")
public String paymentInfo() {
String result = restTemplate.getForObject(INVOKE_URL + "/payment/consul", String.class);
return result;
}
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate() ;
}
}