SpringCloud 整合 Consul 实现服务注册中心

转载声明 : 该文章出处为 扛麻袋的少年


写在开头

  接上一篇文章: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 优点:

  1. 基于 Raft 协议,比较简洁
  2. 支持健康检查
  3. 同时支持 HTTP 和 DNS 协议两种服务发现方式
  4. 支持 K-V 键值存储(类似于 Redis)
  5. 支持多数据中心
  6. 提供了可视化的 web 管理界面
  7. 支持 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 实现服务调用(负载均衡)

猜你喜欢

转载自blog.csdn.net/m0_37989980/article/details/108460842