概述

cousul是什么

https://www.consul.io/intro

Consul是一套开源的分布式服务发现和配置管理系统,由 HashiCorp公司用Go语言开发。
  提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之 Consul提供了一种完整的服务网格解决方案。

它具有很多优点。包括:基于raft协议,比较简洁;支持健康检查,同时支持HTTP和DNS协议支持跨数据中心的WAN集群提供图形界面跨平台,支持 Linux、Mac、 Windows

能干嘛

  • 服务发现:提供HTTP和DNS两种发现方式。
  • 健康监测:支持多种方式,HTTP、TCP、 , HTTP. tcp. docker. shell、Shell脚本定制化
  • KV存储:key、 Value的存储方式
  • 多数据中心:Consul支持多数据中心
  • 可视化Web界面

去哪下

https://www.consul.io/downloads.html

怎么玩

https://www.springcloud.cc/spring-cloud-consul.html

安装Consul并运行

下载win10 64bit版本

下载完成后只有一个 consul.exe文件

  • 在地址栏中输入cmd进入命令行模式

1610803428888.png

  • 查看版本号信息

1610803428913.png

使用开发模式启动

  • consul agent-dev
  1. D:\Applications\consul>consul agent -dev

1610803428942.png

将服务提供者注册到Consul

建module 【cloud-providerconsul-payment8093】

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>cloud2020</artifactId>
  7. <groupId>com.sgy.cloud2020</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>cloud-providerconsul-payment8093</artifactId>
  12. <dependencies>
  13. <dependency>
  14. <groupId>com.sgy.cloud2020</groupId>
  15. <artifactId>cloud-provider</artifactId>
  16. <version>${project.version}</version>
  17. </dependency>
  18. <dependency>
  19. <groupId>org.springframework.cloud</groupId>
  20. <artifactId>spring-cloud-starter-consul-discovery</artifactId>
  21. </dependency>
  22. <!--监控-->
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-actuator</artifactId>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.projectlombok</groupId>
  29. <artifactId>lombok</artifactId>
  30. <scope>provided</scope>
  31. </dependency>
  32. </dependencies>
  33. </project>

  监控依赖包,必须引入,consul在健康检查的时候会对你的实例进行监控健康请求,而这个请求是由spring-boot-starter-actuator来处理的

启动类

package com.sgy.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * Created by AaronShen on 2020/5/28
 */
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderMain8093 {
    public static void main(String[] args) {
        SpringApplication.run(ProviderMain8093.class,args);
    }
}

yml

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

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

controller

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

    @GetMapping(value = "/consul")
    public Object consul() {
        log.info("测试consul , 服务端口号 = {},UUID = {}",SERVER_PORT, UUID.randomUUID().toString());
        return "测试通过";
    }
}

测试

1610803428975.png

将消费者注册到Consul

建module[cloud-consumerconsul-order80]

pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud2020</artifactId>
        <groupId>com.sgy.cloud2020</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-consumerconsul-order80</artifactId>
    <dependencies>
        <dependency>
            <groupId>com.sgy.cloud2020</groupId>
            <artifactId>cloud-consumer</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>

        <!--监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

yml

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

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

主启动类

/**
 * Created by AaronShen on 2020/5/28
 */
@SpringBootApplication
@EnableDiscoveryClient
public class OrderConsul80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderConsul80.class,args);
    }
}

配置Bean

/**
 * Created by AaronShen on 2020/5/26
 */
@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

controller

@Slf4j
@RestController
public class OrderController {
    private final static String PATMEMT_URL = "http://consul-provider-payment";
    @Resource
    RestTemplate restTemplate;

    @GetMapping("/consumer/order/consul")
    public String order() {
        return restTemplate.getForObject(PATMEMT_URL + "/consul",String.class);
    }
}

测试

1610803430416.png

  • 浏览器访问 消费者

1610803430449.png