第九节--Zookeeper服务注册与发现

1 .Eureka停止更新之后你怎么办?
    从2.0版本之后如何还继续用, 官方文档说明:后果自负
 
   SpringCloud整合Zookeeper替代Eureka
 
第一步:新建工程cloud-provider-payment8004,新加依赖,添加之后要排除自带的zookeeper,重新引入对应自己安装的zookeeper版本,引入的zookeeper要排除自身带的log日志包
<!--整合zookeeper整合zookeeper客户端-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
    <!--排除自带的的版本zookeeper,否则启动报错版本冲突-->
    <exclusions>
        <exclusion>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!--引入本地zookeeper一样的版本包:我这里本地的是3.4.13-->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.13</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>

第二步:yml文件配置

server:
  port: 8004
spring:
  application:
    name: cloud-provider-payment
  cloud:
    zookeeper:
      connect-string: 192.168.1.104:2181

第三步:主配置类

@EnableDiscoveryClient //向使用consol或zookeeper作为注册中心时注册服务
@SpringBootApplication
public class PaymentApplication8004 {
public static void main(String[] args) {
SpringApplication.run(PaymentApplication8004.class,args);
  }
}
 

zookeeper每注册一个服务,就会创建一个节点,创建的节点是临时节点还是持久节点?
  创建的肯定是临时节点: 它不会像eureka一样提供者或消费者服务关闭了还会保存服务基本信息
  如果服务关闭,直接剔除在zookeeper上的基本信息
 

 
客户端搭建
 
第一步:新建工程cloud-consumer-zkorder80,pom.xml文件
<dependencies>
    <!--整合zookeeper整合zookeeper客户端-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        <!--排除自带的的版本zookeeper:3.5.3,否则启动报错版本冲突-->
        <exclusions>
            <exclusion>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!--引入本地zookeeper一样的版本包:我这里本地的是3.6.0-->
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.4.13</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
            <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
            </exclusion>
        </exclusions>
    </dependency>




    <dependency>
        <groupId>com.hx.springcloud</groupId>
        <artifactId>cloud-api-commos</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>




    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </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>
</dependencies>

第二步:yml文件

server:
  port: 80


spring:
  application:
    name: cloud-consumer-order #zookeeper对外暴露的微服务名字
  cloud:
    zookeeper:
      connect-string: 192.168.1.104:2181

第三步:config提供的RestTemplate配置类

@Configuration
public class ApplicationConfig {

@Bean
@LoadBalanced //这个注解必须标上,否则无法访问zookeeper上的微服务
public RestTemplate getTemplate(){
return new RestTemplate();
}
}

第四步:controller类

@RestController
@Slf4j
public class OrderController {


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

@Resource private RestTemplate restTemplate;
@PostMapping("/consumer/addPayment")
public CommonResult addPayment(Payment payment){
  System.out.println(payment.getSerial());
  return restTemplate.postForObject(PAYMENT_URL+"/admin/addPayment",payment,CommonResult.class);
}

@GetMapping("/consumer/findPaymentById/{id}")
public CommonResult findPaymentById(@PathVariable("id")Long id){
    log.info("消费端查找数据");
    return restTemplate.getForObject(PAYMENT_URL+"/admin/findPaymentById/"+id,CommonResult.class);
  }
}
 

最后启动服务测试即可;先启动zookeeper 进入zookeeper目录/bin zkServer.cmd
原文地址:https://www.cnblogs.com/hexublog/p/13681803.html