Consul服务注册与发现

目录

一、Consul简介

(一)官网

(二)特点

二、安装并运行Consul

(一)官网安装说明

(二)下载

(三)使用开发模式启动 

三、服务提供者

四、服务消费者

五、三个注册中心异同点

(一)CAP理论

(二)AP架构

(三)CP架构


一、Consul简介

(一)官网

What is Consul? | Consul | HashiCorp Developer

HashiCorp Consul 是一种服务网络解决方案使团队能够管理服务之间以及跨本地和多云环境和运行时的安全网络连接。Consul 提供服务发现、服务网格、流量管理和网络基础设施设备的自动更新。可以在单个 Consul 部署中单独或一起使用这些功能。

Consul服务注册与发现_第1张图片

 

 (二)特点

1、服务发现     提供HTTP和DNS两种发现方式。

2、健康监测     支持多种方式,HTTP、TCP、Docker、Shell脚本定制化监控

3、KV存储        支持Key、Value的存储方式

4、多数据中心  Consul支持多数据中心

5、可视化Web界面

二、安装并运行Consul

(一)官网

Deploy Consul server | Consul | HashiCorp Developer

 也可以参照中文文档Spring Cloud Consul 中文文档 参考手册 中文版

 (二)下载

Install | Consul | HashiCorp Developer

下载完成后只有一个consul.exe文件,通过命令行窗口,查看版本号信息【consul --version】

 

(三)使用开发模式启动 

【consul agent -dev】

通过以下地址可以访问Consul的首页:http://localhost:8500

Consul服务注册与发现_第2张图片

 

三、服务提供者

(一)新建Module

cloud-providerconsul-payment8006

(二)POM

    
        
        
            org.springframework.cloud
            spring-cloud-starter-consul-discovery
        
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

(三)YML

###consul服务端口号
server:
  port: 8006

spring:
  application:
    name: consul-provider-payment
####consul注册中心地址
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        #hostname: 127.0.0.1
        service-name: ${spring.application.name}

(四)主启动类

@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain8006
{
    public static void main(String[] args)
    {
        SpringApplication.run(PaymentMain8006.class,args);
    }
}

(五)业务类Controller

@RestController
public class PaymentController
{
    @Value("${server.port}")
    private String serverPort;

    @GetMapping("/payment/consul")
    public String paymentInfo()
    {
        return "springcloud with consul: "+serverPort+"\t\t"+ UUID.randomUUID().toString();
    }
}

(六)验证

Consul服务注册与发现_第3张图片

四、服务消费者

(一)新建Module

cloud-consumerconsul-order80

(二)POM


         
        
            org.springframework.cloud
            spring-cloud-starter-consul-discovery
        
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

(三)YML

###consul服务端口号
server:
  port: 80

spring:
  application:
    name: cloud-consumer-order
####consul注册中心地址
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        #hostname: 127.0.0.1
        service-name: ${spring.application.name}

(四)主启动类

@SpringBootApplication
@EnableDiscoveryClient //该注解用于向使用consul或者zookeeper作为注册中心时注册服务
public class OrderConsulMain80
{
    public static void main(String[] args)
    {
        SpringApplication.run(OrderConsulMain80.class,args);
    }
}

(五)配置Bean和业务类Controller

Bean

@Configuration
public class ApplicationContextBean
{
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate()
    {
        return new RestTemplate();
    }
}

Controller

@RestController
public class OrderConsulController
{
    public static final String INVOKE_URL = "http://cloud-provider-payment"; //consul-provider-payment

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping(value = "/consumer/payment/consul")
    public String paymentInfo()
    {
        String result = restTemplate.getForObject(INVOKE_URL+"/payment/consul", String.class);
        System.out.println("消费者调用支付服务(consule)--->result:" + result);
        return result;
    }
}

(六)验证

Consul服务注册与发现_第4张图片

Consul服务注册与发现_第5张图片 

 

五、三个注册中心异同点

(一)CAP理论

C:Consistency(强一致性)

A:Availability(可用性)

P:Partition tolerance(分区容错性)

CAP理论关注粒度是数据,而不是整体系统设计的策略

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,
因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:
CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

Consul服务注册与发现_第6张图片

 

(二)AP架构


当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。
结论:违背了一致性C的要求,只满足可用性和分区容错,即AP

Consul服务注册与发现_第7张图片

(三)CP架构

当网络分区出现后,为了保证一致性,就必须拒接请求,否则无法保证一致性
结论:违背了可用性A的要求,只满足一致性和分区容错,即CP 

Consul服务注册与发现_第8张图片

总结:

对于springcloud三个常用注册组件,其异同点大致如下:

Consul服务注册与发现_第9张图片 

 

你可能感兴趣的:(springcloud,ui,java-consul,后端,java,spring,cloud)