Springcloud学习笔记 —— consul入门篇

时间:2023-01-05 01:14:43


什么是consul?

Consul is a service mesh solution providing a full featured control plane with service discovery, configuration, and segmentation functionality. Each of these features can be used individually as needed, or they can be used together to build a full service mesh. Consul requires a data plane and supports both a proxy and native integration model. Consul ships with a simple built-in proxy so that everything works out of the box, but also supports 3rd party proxy integrations such as Envoy.

consul是HashiCorp公司推出的一款工具,主要用于实现分布式系统的服务发现与配置,它提供了以下几个关键特性:

    服务发现:Consul客户端可以提供如 api或mysql之类的服务,其他客户端使用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程序可用很容易的找到他所依赖的服务.

    健康检查:consul客户端可以提供任意数量的健康检查,,可以结合具体的服务(“Web服务器返回200 OK”)或本地节点(“内存利用率低于90%”)。操作者可以通过检测信息来监视群集运行状况,服务发现组件会将流量从不健康的主机路由到健康主机。

    K/V存储:应用程序可以根据需要使用consul的层级K/V存储,如动态配置,功能标记,一致性协调,leader选举等。简单的HTTP API使其易于使用。

    多数据中心:consul支持开箱即用的多数据中心。用户不用担心需要建立额外的抽象层让业务扩展到多个区域.。

	Consul面向DevOps和应用开发者友好.非常适合现代的弹性的基础设施.

官网地址:https://www.consul.io/

如何使用consul?

1.官网下载 consul https://www.consul.io/downloads

2.解压 到指定文件夹 consul只有一个exe文件

Springcloud学习笔记 —— consul入门篇

3.双击运行exe文件 可能会一闪而逝 不用担心 已经启动了 4.确认是否启动 在安装目录下 进入dos命令窗口 通过

consul -version 查看版本信息

Springcloud学习笔记 —— consul入门篇

5.进入开发者模式 consul agent -dev

Springcloud学习笔记 —— consul入门篇

6.(重要) consul 是有图形界面的,默认端口8050 访问地址 http://localhost:8500/ui/dc1/services

如果访问不成功 需要执行以下命令:

consul agent -server -ui -bootstrap-expect 1 -data-dir=/data/consul/ -bind 你电脑的端口号 注意关闭电脑防火墙 -client=0.0.0.0

Springcloud学习笔记 —— consul入门篇

再执行进入开发者模式,即可访问成功。

Springcloud学习笔记 —— consul入门篇

java代码实现

整体结构如下:

Springcloud学习笔记 —— consul入门篇

controller:

package com.atguigu.springcloud.controller;

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

import java.util.UUID;

/**
 * @author Ydx
 * @date 2020/12/17 0:00
 */
@RestController
@Slf4j
public class PaymentConsulController {

    @Value("${server.port}")
    private String serverPort;

    @RequestMapping("/payment/consul")
    public String paymentzk(){
        return "consul with zookeeper:" + serverPort+"\t"+ UUID.randomUUID().toString();
    }

}

启动类

package com.atguigu.springcloud;

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

/**
 * @author Ydx
 * @date 2020/12/16 23:59
 */
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain8006 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8006.class,args);
        System.out.println("----------------consul 消费者 启动成功 ----------");
    }
}

yml文件

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

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>springcloud2020</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-providerconsul-payment8006</artifactId>

    <dependencies>
        <!--SpringCloud consul-server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
        <!--引入自己定义的api通用包 如果你复制的话会有问题  需要自定义一个api通用包-->
        <dependency>
            <groupId>org.example</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>

</project>

成功与失败状态

Springcloud学习笔记 —— consul入门篇