zookeeper/consul

  • 1、zookeeper常见命令
  • 2、zookeeper准备工作
  • 3、服务提供者
  • 3.1、新建Cloud-provider-payment8005
  • 3.2、改pom.xml文件
  • 3.3、写application.yml文件
  • 3.4、主启动类
  • 3.5、编写Controller
  • 3.6、启动8005注册进zookeeper
  • 3.7、验证测试
  • 3.8、思考
  • 4、消费者调用支付微服务
  • 4.1、新建cloud-consumerzk-order
  • 4.2、改pom.xml
  • 4.3、写application.yml
  • 4.4、Config配置类
  • 4.5、主启动类
  • 4.6、业务类
  • 4.7、验证测试
  • 4.8、访问测试地址
  • 5、三个注册中心比较
  • 5.1、CAP理论
  • 5.2、CAP场景



1、zookeeper常见命令

注意点

  • 到zookeeper的bin目录下执行相应命令
  • zookeeper默认端口号:2181
  • consul默认端口号:8500

1、启动服务

sudo ./zkServer.sh start

2、查看服务状态

sudo ./zkServer.sh status

3、停止服务

sudo ./zkServer.sh stop

4、重启服务

sudo ./zkServer.sh restart

5、启动客户端

sudo ./zkCli.sh

2、zookeeper准备工作

关闭防火墙

sudo ufw disable
 # 查看防火墙状态
 sudo ufw status

3、服务提供者

3.1、新建Cloud-provider-payment8005

3.2、改pom.xml文件

<!--如果使用zookeeper做负载均衡,则选择zookeeper客户端组件-->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>

<!--如果使用consul做负载均衡,则选择consul客户端组件-->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

3.3、写application.yml文件

spring:
  cloud:
    zookeeper:
      connect-string: 192.168.25.3:2181   #zookeeper服务器的地址
      
    #如果为consul做负载,则此处配置consul
    consul:
      host: localhost
      port: 8500
      discovery:
        #hostname: 127.0.0.1
        service-name: ${spring.application.name}

3.4、主启动类

@SpringBootApplication
@EnableDiscoveryClient //该注解应用于向Consul或者ZooKeeper作为注册中心时注册服务
public class Payment8005Main {
    public static void main(String[] args) {
        SpringApplication.run(Payment8005Main.class,args);
    }
}

3.5、编写Controller

@RestController
public class PaymentController {

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

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

3.6、启动8005注册进zookeeper

3.7、验证测试

测试1:zookeeper服务器




zookeeper 的管理端口 zookeeper的默认端口号_spring boot


测试2:浏览器



zookeeper 的管理端口 zookeeper的默认端口号_spring boot_02


3.8、思考

zookeeper服务节点是临时的



zookeeper 的管理端口 zookeeper的默认端口号_spring boot_03


4、消费者调用支付微服务

4.1、新建cloud-consumerzk-order

4.2、改pom.xml

<!--如果使用zookeeper做负载均衡,则选择zookeeper客户端组件-->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>

<!--如果使用consul做负载均衡,则选择consul客户端组件-->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

4.3、写application.yml

server:
  port: 80

spring:
  application:
    name: cloud-consumer
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型
      #mysql5.x的没有cj
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: root123
  cloud:
    zookeeper:  
      connect-string: 192.168.25.3:2181   #zookeeper服务器的地址
      
    #如果为consul做负载,则此处配置consul
    consul:
      host: localhost
      port: 8500
      discovery:
        #hostname: 127.0.0.1
        service-name: ${spring.application.name}

4.4、Config配置类

@Configuration
public class ApplicationContextConfig {

    /**
     * RestTemplate的作用是完成微服务之间的调用
     * @return
     */

    @Bean  //依赖注入
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

4.5、主启动类

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

4.6、业务类

@RestController
public class OrderZKController {

    @Resource
    private RestTemplate restTemplate;

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

    @GetMapping("/consumer/zk")
    public String consumer_zk() {

        String result = restTemplate.getForObject(PAYMENT_URL + "/payment/zk", String.class);
        return result;
    }
}

4.7、验证测试



zookeeper 的管理端口 zookeeper的默认端口号_spring_04


4.8、访问测试地址



zookeeper 的管理端口 zookeeper的默认端口号_spring_05


5、三个注册中心比较

组件名

语言实现

CAP

对外暴露接口

SpringCloud集成

Eureka

Java

AP(绝情与否可配置)

可配支持

HTTP

zookeeper

Go

CP(绝情)

支持

HTTP/DNS

consul

Java

CP(绝情)

支持客户端

已集成

5.1、CAP理论

  • C:Consistency (强一致性)
  • A:Availability (可用性)
  • P:Partition tolerance (分区容错性)

5.2、CAP场景

类型

场景

CA(不现实)

单点集群,满足—致性,可用性的系统,通常在可扩展性上不太强大。

CP

满足一致性,分区容忍必的系统,通常性能不是特别高。

AP

满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。