Consul服务注册与发现

一、Consul简介

官网:https://www.consul.io/intro/index.html
Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go语言开发。提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。它具有很多优点。包括:基于raft协议,比较简洁;支持健康检查,同时支持HTTP和DNS协议支持跨数据中心的WAN集群提供图形界面跨平台,支持Linux、Mac、Windows

二、Consul能干嘛?

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

三、Consul下载

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

四、Consul怎么玩

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

五、安装并运行Consul

  • 官网安装说明

https://learn.hashicorp.com/consul/getting-started/install.html

  • 下载完成后只有一个consul.exe文件,硬盘路径下双击运行,查看版本信息
  • 使用开发模式启动(consul agent -dev),通过以下地址可以访问Consul的首页:http;//localhost:8500

六、服务提供者注册进Consul

1) 新建model(支付服务模块构建)

cloud-providerconsul-payment8006

2) pom文件配置



    
        cloud2020
        com.ft.springcloud
        1.0-SNAPSHOT
    
    4.0.0
    cloud-providerconsul-payment8006
    
        
        
            org.springframework.cloud
            spring-cloud-starter-consul-discovery
        
        
            com.ft.springcloud
            cloud-api-commons
            ${project.version}
        
        
        
            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
        
    

3) application.yml文件配置

server:
  port: 8006

spring:
  application:
    name: consul-provider-payment
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}

4) 创建启动类

package com.ft.springcloud;

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

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

5) 实现业务类

  • controller层的构建

package com.ft.springcloud.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.UUID;

@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();
    }
}

访问测试地址:http://localhost:8006/payment/consul

七、服务消费者注册进Consul

1) 新建model(订单模块构建)

cloud-consumerconsul-order80

2) pom文件配置



    
        cloud2020
        com.ft.springcloud
        1.0-SNAPSHOT
    
    4.0.0

    cloud-consumerconsul-order80
    
        
        
            org.springframework.cloud
            spring-cloud-starter-consul-discovery
        
        
            com.ft.springcloud
            cloud-api-commons
            ${project.version}
        
        
        
            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
        
    

3) application.yml文件配置

server:
  port: 80

spring:
  application:
    name: consul-consumer-order
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}

4) 创建启动类

package com.ft.springcloud;

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

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

5) 实现业务类

  • 配置Bean

package com.ft.springcloud.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ApplicationContextConfig {

    @LoadBalanced
    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}
  • controller层的构建

package com.ft.springcloud.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;

@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;
    }
}

访问测试地址:http://localhost/consumer/payment/consul

你可能感兴趣的:(Consul服务注册与发现)