SpringCloud系列文章列表
0. SpringCloud实战专栏介绍准备
1. SpringCloud父工程搭建
2. 服务注册中心之Eureka(单机+集群+Ribbon调用)
3. 服务注册中心之Zookeeper
4. 服务注册中心之Consul
5. eureka、zookeeper和consul三种注册中心之间的区别
6. 负载均衡服务调用之Ribbon
7. 服务调用之OpenFeign
8. Hystrix断路器全面实战总结
9. SpringCloud Gateway网关
10. SpringCloud Config配置中心
11. SpringCloud Bus消息总线
12. SpringCloud Stream消息驱动
13. SpringCloud Sleuth分布式请求链路追踪
目录
1 Consul介绍
1.1 简介
官方文档: https://www.consul.io/docs/intro
中文文档:https://www.springcloud.cc/spring-cloud-consul.html
Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go语言开发。
提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用, 也可以-起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。
它具有很多优点。包括:基于 raft协议,比较简洁;支持健康检查,同时支持HTTP和DNS协议支持跨数据中心的WAN集群提供图形界面跨
平台,支持Linux、Mac、Windows
1.2 功能
2 Consul安装(windows)
本文演示windows版本安装,linux可以采用docker安装,非常方便;
2.1 下载
官方下载地址 https://www.consul.io/downloads ,选择对应系统下载;
ps: 网速贼慢,需要windows版本的找我要
2.2 安装运行
2.2.1)解压后得到consul.exe,配置环境变量
系统变量 Path中,新增路径 D:\consul
2.2.2) 运行consul
打开cmd命令行,执行 consul agent -dev
2.2.3)访问自带的可视化界面 http://localhost:8500/
3 Consul安装(linux)
docker安装
docker run -d -p 8500:8500 --name=dev-consul -e CONSUL_BIND_INTERFACE=eth0 consul
同理,访问 http://IP:8500/
3 项目实战
启动consul,充当注册中心角色;
新建两个工程;服务提供者和消费者;
服务提供者为 cloud-provider-consul8006
消费者为 cloud-consumerzk-order80
3.1 服务提供者
新建子项目cloud-provider-consul8006
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--consul-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
</dependencies>
application.yml
server:
port: 8006
spring:
application:
name: provider-consul8006
#consul配置
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
hostname: localhost
启动类加注解 @EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderConsulMain8006 {
public static void main(String[] args) {
SpringApplication.run(ProviderConsulMain8006.class, args);
}
}
写个web接口便于测试
@RestController
public class PaymentConsulController {
@Value("${server.port}")
private Integer serverPort;
@GetMapping("/payment/consul")
public String paymentConsul(){
return "springCloud with consul: "+serverPort+"\t "+ UUID.randomUUID().toString();
}
}
启动项目,查看consul如下图,注册成功
点击我们注册的服务,可以看到具体的健康状态;
实际上就是调用/actuator/health来进行健康检查的;
测试下本地接口,成功
3.2 服务消费者
搭建消费者项目 cloud-consumerconsul-order80
pom.xml 跟生产者一样
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
</dependencies>
application.yml
server:
port: 80
spring:
application:
name: consumer-consul
#consul
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
hostname: localhost
启动类增加 @EnableDiscoveryClient注解
新增RestTemplate配置类
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
}
写个web接口,调用服务提供者
@RestController
public class PaymentController {
private final String url = "http://provider-consul8006";
@Autowired
RestTemplate restTemplate;
@GetMapping("/consumer/payment/consul")
public String paymentConsul(){
return restTemplate.getForObject(url+"/payment/consul",String.class);
}
}
启动消费者,查看consul注册成功;
测试消费者调用服务提供者是否成功
如图远程调用成功;
注意:
如果实战过程中,发现项目在consul上不在线;一定先要明白一个问题,在consul中要能够访问http://项目ip:8006/actuator/health接口;
也就是说consul要和你的项目在同一个网内;
例如consul在外网linux服务器,项目跑着本地,那死活是无法在线的
点赞+评论+关注
本文源码地址: https://gitee.com/shuaidawang/SpringCloudDemo.git
有错误的地方欢迎指正!可以加入qq交流群: 700637673