【SpringCloud】09 Consul 与注册中心的总结

 

下载地址:Consul 1.8.3  https://www.consul.io/downloads 

 

解压后放在目录中双击,然后在目录中开启CMD

输入 consul --version  查看版本信息:

输入  consul agent -dev  开启代理

访问本机地址:

http://localhost:8500/ui/dc1/services

 

发现拿Git-Bash一直找不到命令,才反应过来我是拿XShell来访问的

 

提供者注册Consul

1、新建提供者模块,模块名称:Provider-Payment-Consul-8006

2、导入Consul的依赖坐标:

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>cn.dzz.springcloud</groupId>
        <artifactId>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-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

server:
  port: 8006

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

主启动编写:

package cn.dzz.springcloud;

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

/**
 * @author DaiZhiZhou
 * @file SpringCloud-ATGG-2020
 * @create 2020-08-26 18:53
 */
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderPaymentConsulServicePort8006 {

    public static void main(String[] args) {
        SpringApplication.run(ProviderPaymentConsulServicePort8006.class, args);
    }
}

配置略微调整一下:

package cn.dzz.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 DaiZhiZhou
 * @file SpringCloud-ATGG-2020
 * @create 2020-08-26 10:11
 */
@RestController
@Slf4j
@RequestMapping("payment")
public class ConsulPaymentController {

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

    @RequestMapping("consul")
    public String paymentConsul(){
        return "SpringCloud with Consul : " + serverPort + "\t" + UUID.randomUUID().toString();
    }

}

启动服务,访问接口:服务正常执行

http://localhost:8006/payment/consul
SpringCloud with Consul : 8006 6dc654f4-fc2f-4744-b181-865539f143fd

查看8500Consul服务中心界面:

http://localhost:8500/ui/dc1/services

 

消费者服务注册Consul

1、新建消费者服务模块,模块名称:Consumer-Order-Consul-Port-80

2、更改POM:

 <dependencies>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>cn.dzz.springcloud</groupId>
            <artifactId>API-Commons</artifactId>
            <version>${project.version}</version> <!--<version>1.0-SNAPSHOT</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>

3、编写Application.yml

server:
  port: 80

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

4、编写启动类:

package cn.dzz.springcloud;

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

/**
 * @author DaiZhiZhou
 * @file SpringCloud-ATGG-2020
 * @create 2020-08-26 19:18
 */
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerOrderConsulPort80Application {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerOrderConsulPort80Application.class, args);
    }
}

拷贝ZK过来的资源就行了

注意Controller更改一下:

package cn.dzz.springcloud.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

/**
 * @author ArkD42
 * @file SpringCloud-ATGG-2020
 * @create 2020年08月24日 22:47
 */

@Slf4j
@RestController
@RequestMapping("consul/order")
public class ConsulOrderController {

    @Resource
    private RestTemplate restTemplate;

    public static final String PAYMENT_URL = "http://consul-provider-payment-service";

    @RequestMapping("consumer/payment")  // consul/order/consumer/payment
    public String zookeeperPaymentInfo(){
        return restTemplate.getForObject(PAYMENT_URL + "/payment/consul", String.class);
    }

}

接口测试与服务中心结果:

 

视频讲到这里就介绍完了3种服务注册中心,如何将我们的服务注册到这些中心进行基本的管理

Eureka & Zookeeper & Consul

 

CAP概念:

Consistency 一致性

Availability 可用性

Partition tolerance 分区可容错性

 

CA 一致性 + 可用性 = RDBMS

CP 一致性 + 分区可容错性 = MongoDB、HBase、Redis

AP 可用性 + 分区可容错性 = CouchDB、Cassandra、DynamoDB

即这些特性,数据库不可能同时三者特性都能胜任

 

我们服务注册中心对应的CAP特性

CP:【Zookeeper  / Consul】

AP: 【Eureka】

 

posted @ 2020-08-26 21:22  emdzz  阅读(200)  评论(0)    收藏  举报