SpringCloud基础(3):注册中心Zookeeper和Consul

x33g5p2x  于2021-12-19 转载在 Spring  
字(5.5k)|赞(0)|评价(0)|浏览(244)

1、Zookeeper服务注册与发现

1.1、注册中心Zookeeper

1.2、服务提供者

1.3、服务消费者

2、Consul服务注册与发现

2.1、简介

2.2、主要特点

2.3、在docker上安装启动consul

3、服务提供者

4、服务消费者

5、三者的异同点

1、Zookeeper服务注册与发现

1.1、注册中心Zookeeper

关闭linux的防火墙:

systemctl stop firewalld
systemctl status firewalld

使用docker启动Zookeeper:(docker的操作可以看这篇:Docker基础入门学习笔记)

#拉取Zookeeper镜像
docker pull zookeeper

#启动Zookeeper
docker run --name zk01 -p 2181:2181 --restart always -d zookeeper

服务节点是临时节点还是持久节点?
        zookeeper也是有心跳机制,在一定时间能如果一直没心跳返回,Zookeeper就会把服务节点剔除掉。所以在Zookeeper上的服务节点是临时节点。

1.2、服务提供者

为了区分,中间空个8003。

  1. 新建工程cloud-provider-payment8004
  2. pom
<!--因为接下来不会用到数据库,所以不导入数据库相关的依赖(防止没配置而报错)-->

	<!--替换掉eureka依赖,其他直接复制8001-->
        <!--SpringBoot整合Zookeeper客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<!--        <exclusions>-->
            <!--先排除自带的zookeeper3.5.3-->
<!--            <exclusion>-->
<!--                <groupId>org.apache.zookeeper</groupId>-->
<!--                <artifactId>zookeeper</artifactId>-->
<!--            </exclusion>-->
<!--        </exclusions>-->
        </dependency>

        <!--添加zookeeper3.4.9版本(引入对应版本的依赖)-->
<!--        <dependency>-->
<!--            <groupId>org.apache.zookeeper</groupId>-->
<!--            <artifactId>zookeeper</artifactId>-->
<!--            <version>3.4.9</version>-->
<!--        </dependency>-->
  1. yml
#端口号
server:
  port: 8004

spring:
  application:
    #服务别名——注册到zookeeper注册中心的名称
    name: cloud-provider-payment
  cloud:
    zookeeper:
      connect-string: 10.211.55.17:2181 #linux的ip加暴露的端口号
  1. 主启动类
@EnableDiscoveryClient	//该注解用于向使用consul或者Zookeeper作为注册中心时注册服务
@SpringBootApplication
public class PaymentMain8004 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8004.class, args);
    }
}
  1. controller
    新建controller.PaymentController
@Slf4j
@RestController
public class PaymentController {

    @Value("${server.port}")        //获取端口号
    private String serverPort;

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

}
  1. Zookeeper容器
    默认已经帮我们启动了服务端和客户端,如果想进去容器的话,使用下面的命令。
#查看正在运行的容器(查看Zookeeper容器的id)
docker ps

#进入zookeeper容器
docker exec -it 容器ID /bin/bash

#退出容器(或者按快捷键ctrl+P+Q退出)
exit
#启动容器
docker start 容器ID
#关闭容器
docker stop 容器ID
  1. 启动8004项目,浏览器输入http://localhost:8004/payment/zk

  1. 进入Zookeeper容器(成功注册进注册中心)


 json工具 - 在线工具

1.3、服务消费者

  1. 新建消费者模块cloud-consumerzk-order80。
  2. pom和yml直接复制8004。(yml中端口号改为80,应用名改为cloud-consumer-order,其他都相同)
  3. 主启动类。(与8004相同)
  4. 在springcloud包下新建config.ApplicationContextConfig
@Configuration
public class ApplicationContextConfig {

    @Bean
    @LoadBalanced   //负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

}
  1. 新建controller.OrderZKController
@RestController
@Slf4j
public class OrderZKController {

    public static final String INVOKE_URL = "http://cloud-provider-payment";

    @Resource
    private RestTemplate restTemplate;

    @RequestMapping("/consumer/payment/zk")
    public String paymentInfo(){
        String result = restTemplate.getForObject(INVOKE_URL + "/payment/zk", String.class);
        return result;
    }

}
  1. 启动项目

http://localhost/consumer/payment/zk

2、Consul服务注册与发现

Consul官网:https://www.consul.io/
Consul中文文档:https://www.springcloud.cc/spring-cloud-consul.html

2.1、简介

Consul是一种服务网格解决方案,提供具有服务发现,配置和分段功能的全功能控制平面。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建完整的服务网格。Consul需要一个数据平面,并支持代理和本机集成模型。Consul附带了一个简单的内置代理,因此一切都可以直接使用,还支持Envoy等第三方代理集成。

2.2、主要特点

  • 服务发现:Consul的客户端可以注册服务,例如 api或mysql,其他客户端可以使用Consul来发现给定服务的提供者。使用DNS或HTTP,应用程序可以轻松找到它们依赖的服务。
  • 健康检测:领事客户端可以提供任意数量的运行状况检查,这些检查可以与给定服务(“ Web服务器是否返回200 OK”)或本地节点(“内存利用率低于90%”)相关。操作员可以使用此信息来监视群集的运行状况,服务发现组件可以使用此信息将流量从不正常的主机发送出去。
  • KV存储:应用程序可以将Consul的分层键/值存储用于多种目的,包括动态配置,功能标记,协调,领导者选举等。简单的HTTP API使其易于使用。
  • 安全的服务通信:领事可以为服务生成并分发TLS证书,以建立相互TLS连接。 意图 可用于定义允许哪些服务进行通信。可以使用可以实时更改的意图轻松管理服务分段,而不必使用复杂的网络拓扑和静态防火墙规则。
  • 多数据中心:Consul开箱即用地支持多个数据中心。这意味着Consul的用户不必担心会构建其他抽象层以扩展到多个区域。

Consul旨在对DevOps社区和应用程序开发人员友好,使其非常适合现代,灵活的基础架构。

2.3、在docker上安装启动consul

#拉取consul镜像
docker pull consul

#启动consul
docker run -d  -p 8500:8500/tcp --name myConsul  consul agent -server -ui -bootstrap-expect=1 -client=0.0.0.0

然后在浏览器输入http://http://10.211.55.17/:8500(linux的IP地址加上冒号8500)

3、服务提供者

  1. 新建服务提供者cloud-provider-consul-payment8006。
  2. pom复制8004。(用下面的依赖替换Zookeeper的依赖)
<!--SpringCloud consul-server-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-consul-discovery</artifactId>
  </dependency>
  1. yml
server:
  port: 8006

spring:
  application:
    name: consul-provider-payment
  cloud:
    consul:
      host: 10.211.55.17  #用linux的ip地址(consul在本机就填localhost)
      port: 8500
      discovery:
        service-name: ${spring.application.name}
  1. 主启动类(与8004相同)

  2. controller

@RestController
@Slf4j
public class PaymentController {

    @Value("${server.port}")        //获取端口号
    private String serverPort;

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

}

6.启动项目

http://localhost:8006/payment/consul

4、服务消费者

  1. 新建模块cloud-consumer-consul-order80
  2. pom(与8006相同)
  3. yml(端口号为80,应用名为consul-consumer-order,其他和8006相同)
  4. 主启动类(与8006相同)
  5. config(和zk的消费者相同)
  6. controller.OrderConsulController
@RestController
@Slf4j
public class OrderConsulController {

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

    @Resource
    private RestTemplate restTemplate;

    @RequestMapping("/consumer/payment/consul")
    public String paymentInfo(){
        String result = restTemplate.getForObject(INVOKE_URL + "/payment/consul", String.class);
        return result;
    }

}
  1. 启动项目 

http://localhost/consumer/payment/consul 

5、三者的异同点

CAP:(只能二选一)
A:可用性
C:一致性
P:分区容错性(微服务架构必须保证有P)

相关文章