Consul

Consul是一套开源的分布式服务发现和配置管理系统,用 go 语言开发。

提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。

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

在官网下载Consul,解压后只有一个 consul.exe文件。

查看版本号:

  1. .\consul.exe --version

启动consul:

  1. .\consul.exe agent -dev

启动后,consul自带一个web页面,可以直接访问:http://localhost:8500

环境搭建

服务注册

  1. 创建maven项目

  2. 添加依赖

    1. <dependencies>
    2. <!-- Consul的starter -->
    3. <dependency>
    4. <groupId>org.springframework.cloud</groupId>
    5. <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    6. </dependency>
    7. <dependency>
    8. <groupId>org.springframework.boot</groupId>
    9. <artifactId>spring-boot-starter-web</artifactId>
    10. </dependency>
    11. <dependency>
    12. <groupId>org.springframework.boot</groupId>
    13. <artifactId>spring-boot-starter-actuator</artifactId>
    14. </dependency>
    15. <dependency>
    16. <groupId>org.springframework.boot</groupId>
    17. <artifactId>spring-boot-devtools</artifactId>
    18. <scope>runtime</scope>
    19. <optional>true</optional>
    20. </dependency>
    21. <dependency>
    22. <groupId>org.projectlombok</groupId>
    23. <artifactId>lombok</artifactId>
    24. </dependency>
    25. </dependencies>
  1. 编写主配置
    server:
    port: 8006
    spring:
    application:
     name: consul-provider-payment
    cloud:
     consul:
       host: localhost
       port: 8500
       discovery:
         service-name: ${spring.application.name}
    
  1. 编写主启动类
    @SpringBootApplication
    @EnableDiscoveryClient
    public class PaymentConsulMain8006 {
     public static void main(String[] args) {
         SpringApplication.run(PaymentConsulMain8006.class, args);
     }
    }
    
  1. 编写测试Controller

    @RestController
    @Slf4j
    public class PaymentController {
    
     @Value("${server.port}")
     private String serverPort;
    
     @RequestMapping("/payment/consul")
     public String paymentZK() {
         return "springcloud with zookeeper: " + serverPort + "\t" + UUID.randomUUID().toString();
     }
    }
    

服务消费

  1. 创建maven工程

  2. 添加依赖(同服务注册的依赖)

  3. 编写主配置 ```yaml server: port: 80

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



4. 
编写主启动类
```java
@SpringBootApplication
@EnableDiscoveryClient
public class OrderConsulMain80 {
    public static void main(String[] args) {

        SpringApplication.run(OrderConsulMain80.class, args);
    }
}
  1. 编写Configuration类注入RestTemplate

    @Configuration
    public class ApplicationConfig {
    
     @Bean
     @LoadBalanced
     public RestTemplate getRestTemplate() {
         return new RestTemplate();
     }
    }
    
  1. 编写测试controller调用注册的服务

    @RestController
    @Slf4j
    public class OderController {
    
     public static final String INVOKE_URL = "http://consul-provider-payment";
    
     @Autowired
     private RestTemplate restTemplate;
    
     @GetMapping("/consumer/payment/consul")
     public String payentInfo() {
         String result = restTemplate.getForObject(INVOKE_URL + "/payment/consul", String.class);
         return result;
     }
    }
    

访问:http://localhost/consumer/payment/consul 进行测试