转载声明 : 该文章出处为 扛麻袋的少年
本文目录:
写在开头
接上一篇文章:Spring Cloud 整合 Eureka 实现服务注册中心。随着 Eureka 2.0 的闭源停更。Eureka 作为 Spring Cloud 优先选择的服务注册与发现组件,它的太子之位也就不保了。
除了已经介绍过的 Zookeeper 可以作为 Spring Cloud 的服务注册中心外,Consul 也可以作为 Spring Cloud 的服务注册中心
。虽然 Eureka、Zookeeper、Consul 都可以作为 Spring Cloud 的服务注册中心,但是 它们的实现原理都是相通的
。
接下来,我们就先来认识一下 Consul 吧。
1.Consul 的介绍
本文只拿来将 Consul 作为 Spring Cloud 服务注册中心使用,其他功能不做介绍。
Consul 官网:https://www.consul.io/intro/index.html。Consul 是一套 开源的
分布式服务发现和配置管理系统
,由 HashiCorp 公司用 Go语言
开发的。
Consul 提供了微服务系统中的 服务治理
、配置中心
、控制总线
等功能。这些功能中的每一个都可以根据需求来单独使用,也可以一起使用来构建全方位的服务网格,总之 Consul 提供了一整套完整的服务网格化解决方案。
下载地址:https://www.consul.io/downloads.html
附:Spring Cloud Consul 中文文档参考手册:https://www.springcloud.cc/spring-cloud-consul.html
Consul 优点:
- 基于 Raft 协议,比较简洁
- 支持健康检查
- 同时支持 HTTP 和 DNS 协议两种服务发现方式
- 支持 K-V 键值存储(类似于 Redis)
- 支持多数据中心
- 提供了可视化的 web 管理界面
- 支持 Linux、Mac、Windows
Consul 服务注册中心架构
2.准备工作
1.Consul 安装
既然要使用 Consul 作为 Spring Cloud 的服务注册中心,那么首先就得来安装一个 Consul 了。此处使用 Windows 64 bit 版本
,将下载的文件解压即可,解压后只有一个 consul.exe 文件
。双击打开即可运行。
通过 cmd 命令行,进入 consul.exe 所在的目录,使用命令:consul --version
可以来查看版本号;通过命令:consul agent -dev
使用开发模式启动。
启动过程,如图所示:
通过 http://localhost:8500 进入web管理页面:
到此为止,Consul 客户端安装完成。如果你是 Linux 环境,你也可以安装 Consul Linux 客户端。
2.基于 Consul 实现服务注册中心工程搭建
2.1 在服务提供方操作
模块名称定义为:cloud-providerconsul-payment8006
,来充当服务提供者的角色。
Ⅰ. pom.xml 引入依赖
引入 spring-cloud-starter-consul-discovery
依赖。
<!--整合 springcloud-consul 依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
- 1
- 2
- 3
- 4
- 5
Ⅱ. application.yml 配置文件修改
server:
port: 8006
spring:
application: #服务名称
name: consul-provider-payment
cloud:
consul: #consul地址
host: localhost
port: 8500
discovery:
service-name: ${
spring.application.name}
Ⅲ. 编写controller
@RestController
@Slf4j
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/payment/consul")
public String paymentConsul(){
return "springcloud with consul: "+serverPort+"\t"+ UUID.randomUUID().toString();
}
}
Ⅳ. 项目启动
启动cloud-providerconsul-payment8006
服务提供模块,通过 Consul web 管理界面,我们能够发现当前这个服务已经注册成功。如下图所示:
2.2.在服务消费者操作
模块名称定义为:cloud-consumerconsul-order80
,来充当服务消费者的角色。
Ⅰ pom.xml 引入依赖
同 服务提供模块
一样。也需要引入spring-cloud-starter-consul-discovery
依赖。
<!--整合 springcloud-consul 依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
Ⅱ.application.yml 配置文件修改
server:
port: 80
spring:
application:
name: consul-consumer-order
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${
spring.application.name}
Ⅲ.使用 RestTemplate 进行服务调用
@Configuration
public class ApplicationContextConfig {
@LoadBalanced
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
Ⅳ.编写controller
@RestController
@Slf4j
public class OrderConsulController {
public static final String INVOME_URL = "http://consul-provider-payment";
@Resource
private RestTemplate restTemplate;
@GetMapping("/consumer/payment/consul")
public String payment (){
String result = restTemplate.getForObject(INVOME_URL+"/payment/consul",String.class);
return result;
}
}
Ⅴ. 项目启动
启动cloud-consumerconsul-order80
消费模块,通过 Consul web 管理界面,我们也能够发现当前这个服务已经注册成功。如下图所示:
3. 接口调用测试
本文代码下载地址:SpringCloud 整合 Consul 实现服务注册中心 (提取码:2xzq)
下一篇:SpringCloud 整合 Ribbon 实现服务调用(负载均衡)