zoukankan      html  css  js  c++  java
  • springcloud-Consul服务注册与发现(三)

    Consul简介

    • 是什么
    1. Consul是一套开源的分布式服务发现和配置管理系统, 由Go语言开发.
    2. 提供了微服务系统中的服务治理, 配置中心, 控制总线等功能. 这些功能中的每个都可以根据需要单独使用, 也可以一起使用以构建全方位的服务网格, 总之Consul提供了一种完整的服务网格解决方案.
    3. Consul中文文档: https://www.springcloud.cc/spring-cloud-consul.html
    • 能干什么
    1. 服务发现  ->  提供HTTP和DNS两种发现方式
    2. 健康检测  ->  支持多种协议 HTTP, TCP, Docker, Shell脚本定制化
    3. KV存储  ->  Key, Value的存储方式
    4. 多数据中心  ->  Consul支持多数据中心
    5. 天生自带可视化Web界面.
    • 安装与运行
    1. 下载完解压后只有一个consul.exe文件, 在cmd下查看版本: consul --version
    2. 在cmd下启动: consul agent -dev
    3. 通过一下地址访问Consul的首页: http://localhost:8500

    服务提供者注册进Consul

    1. 新建Module支付服务cloud-providerconsul-payment8006
    2. pom中增加如下依赖
      <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-consul-discovery</artifactId>
          </dependency>
    3. yml
      #consul服务端口号
      server:
        port: 8006
      
      spring:
        application:
          name: consul-provider-payment
        cloud:
          consul: #consul注册中心
            host: localhost
            port: 8500
            discovery:
              service-name: ${spring.application.name}
              #hostname: 127.0.0.1
    4. 主启动类
      @EnableDiscoveryClient
      @SpringBootApplication
      public class PaymentMain8006 {
      
          public static void main(String[] args) {
              SpringApplication.run(PaymentMain8006.class, args);
          }
      }
    5. 业务类Controller
      @RestController
      @Slf4j
      public class PaymentController {
      
          @Value("${server.port}")
          private String serverPort;
      
          @GetMapping("/payment/consul")
          public String paymentConsul() {
      
              return "SpringCloud with consul: " + serverPort + "	" + UUID.randomUUID().toString();
          }
      }
    6. 测试
      • http://localhost:8006/payment/consul

    服务消费者注册进Consul

    1. 新建Module消费服务cloud-consumerconsul-order80
    2. pom
      <dependencies>
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-consul-discovery</artifactId>
              </dependency>
      
              <dependency>
                  <groupId>springcloud</groupId>
                  <artifactId>cloud-api-commons</artifactId>
                  <version>${project.version}</version>
              </dependency>
      
              <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.boot</groupId>
                  <artifactId>spring-boot-devtools</artifactId>
                  <scope>runtime</scope>
                  <optional>true</optional>
              </dependency>
      
              <dependency>
                  <groupId>org.projectlombok</groupId>
                  <artifactId>lombok</artifactId>
                  <optional>true</optional>
              </dependency>
      
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-test</artifactId>
                  <scope>test</scope>
              </dependency>
          </dependencies>
    3. yml
      #consul服务端口号
      server:
        port: 80
      
      spring:
        application:
          name: consul-consumer-order
        cloud:
          consul: #consul注册中心
            host: localhost
            port: 8500
            discovery:
              service-name: ${spring.application.name}
              #hostname: 127.0.0.1
    4. 主启动类
      @SpringBootApplication
      @EnableDiscoveryClient
      public class OrderConsulMain80 {
          public static void main(String[] args) {
              SpringApplication.run(OrderConsulMain80.class,args);
          }
      }
    5. 配置Bean(RestTemplate)
      @Configuration
      public class ApplicationContextConfig {
      
          @LoadBalanced
          @Bean
          public RestTemplate getRestTemplate() {
              return new RestTemplate();
          }
      }
    6. controller
      @RestController
      @Slf4j
      public class OrderConsulController {
      
          private static final String INVOKE_URL = "http://consul-provider-payment";
      
          @Resource
          private RestTemplate restTemplate;
      
          @GetMapping("/consumer/consul")
          public String paymentInfo() {
      
              String url = INVOKE_URL + "/payment/consul/";
              String result = restTemplate.getForObject(url, String.class);
              return result;
          }
      }
    7. 测试
      • http://localhost/consumer/payment/consul

    与Eureka的区别

    • 异同
    • CAP理论
    1. C: Consistency - 强一致性
    2. A: Availability - 可用性
    3. P: Partition tolerance - 分区容错
    4. CAP理论关注的是数据, 而不是整体系统设计的策略
    • 经典的CAP
    1. CAP理论的核心: 一个分布式系统不可能同时很好的满足一致性, 可用性和分区容错性这三个需求.
    2. AP - Eureka
      • 当网络分区出现后, 为了保证可用性, 系统B可以返回旧值, 保证系统的可用性. 但违背了一致性C的要求.
    3. CP -  Consul
      • 当网络分区出现后, 为了保证一致性, 就必须拒接请求, 否则无法保证一致性, 但违背了可用性A的要求.
  • 相关阅读:
    spring mvc 返回json
    spring mvc 解决后台传递值乱码问题
    sring mvc 返回值至jsp界面的几种方式
    spring mvc 注解访问控制器以及接收form数据的方式,包括直接接收日期类型及对象的方法
    spring mvc 通过配置xml访问控制器的三种方式
    spring mvc 入门配置
    HBase 学习笔记
    Centos搭建Linux测试环境,几个基本的设置项
    kafka 集群安装与安装测试
    Kafka 分布式消息队列介绍
  • 原文地址:https://www.cnblogs.com/binwenhome/p/13183665.html
Copyright © 2011-2022 走看看