SpringCloud学习笔记——服务注册中心——Consul

SpringCloud学习笔记——服务注册中心——Consul

参考:尚硅谷2020最新版SpringCloud(H版&alibaba)——周阳

3. Consul

简介

  1. 官网https://www.consul.io/intro/index.html

    中文官网https://www.springcloud.cc/spring-cloud-consul.html

  2. 能干嘛

    • 服务发现:提供HTTP和DNS两种方式
    • 健康监测:支持多种方式,HTTP、TCP、Docker、Shell脚本定制化
    • KV存储:Key、Value的存储方式
    • 多数据中心:Consul支持多数据中心
    • 可视化web界面
  3. 下载地址

    https://www.consul.io/downloads

  4. windows下安装教程

    解压就一个consul.exe文件,安装成功!

  5. linux下安装教程

    1. 下载consul

      wget https://releases.hashicorp.com/consul/1.8.0/consul_1.8.0_linux_amd64.zip
      
    2. 解压consul

      unzip consul_1.8.0_linux_amd64.zip
      
    3. 测试 consul

      ./consul
      

      在这里插入图片描述

    4. 查看版本

      ./consul version
      

      在这里插入图片描述

    5. 启动consul

      ./consul agent -dev -ui -node=consul-dev -client=服务器内网ip
      

      在这里插入图片描述

    6. 访问测试:服务器外网ip:8500
      在这里插入图片描述

    7. 关闭 consul

      ctrl+c

  6. 查看版本号

    consul --version

  7. 使用开发者模式启动

    进入目录,打开命令行输入consul agent -dev

  8. 访问Consul首页

    地址:http://localhost:8500
    在这里插入图片描述

创建服务提供者并注册

  1. 创建子模块,子模块名称

    cloud-providerconsul-payment8006

  2. pom依赖

    <dependencies>
        <!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
        <dependency>
            <groupId>com.naclo</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!--SpringCloud consul-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
        <!-- SpringBoot整合Web组件 -->
        <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>
        <!--日常通用jar包配置-->
        <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>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
  3. 创建application.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}
    
  4. 创建主启动类PaymentMain8006

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

    @RestController
    @Slf4j
    public class PaymentController {
        @Value("${server.port}")
        private String serverPort;
    
        @RequestMapping(value = "/payment/consul")
        public String paymentConsul() {
            return "springcloud with consul: " + serverPort + "\t   " + UUID.randomUUID().toString();
        }
    }
    
  6. 启动,测试

    • 访问http://localhost:8500/
      在这里插入图片描述

    • 访问http://localhost:8006/payment/consul

      返回springcloud with consul: 8006 a1a1653a-54ac-44cc-ab09-6b2f7b5b8a22

创建服务消费者并注册

  1. 创建子模块,子模块名称

    cloud-consumerconsul-order80

  2. pom依赖

    <dependencies>
        <!--SpringCloud consul-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
        <!-- SpringBoot整合Web组件 -->
        <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>
        <!--日常通用jar包配置-->
        <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. 创建application.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}
    
  4. 创建主启动类OrderConsulMain80

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

    @Configuration
    public class ApplicationContextConfig {
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate() {
            return new RestTemplate();
        }
    }
    
  6. 编写PaymentController

    @RestController
    @Slf4j
    public class OrderConsulController {
        public static final String INVOKE_URL = "http://consul-provider-payment";
    
        @Resource
        private RestTemplate restTemplate;
    
        @GetMapping(value = "/consumer/payment/consul")
        public String paymentInfo() {
            String result = restTemplate.getForObject(INVOKE_URL + "/payment/consul", String.class);
            return result;
        }
    }
    
  7. 启动,测试

    • 访问http://localhost:8500/
      在这里插入图片描述

    • 访问http://localhost:80/consumer/payment/consul

      返回springcloud with consul: 8006 16b48677-d49f-4fa9-9534-cfa4d5b18f9e

猜你喜欢

转载自blog.csdn.net/qq_24191395/article/details/106935597