Spring Cloud(05)——Spring cloud整合Zookeeper代替Eureka

479 阅读2分钟

Spring Cloud(04)——Eureka的简介和部署使用中,我们使用Eureka作为我们微服务的注册中心,现在我们使用Zookeeper来代替Eureka,关于Zookeeper的使用请看Spring Boot——Dubbo和Zookeeper的简单使用.

1、支付服务注册进zookeeper

1、新建模块cloud-provide-payment8004

2、导入pom依赖

<dependencies>
    <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>com.cheng.springcloud</groupId>
        <artifactId>cloud-api-commons</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zookeeper-discovery</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>
    </dependency>
</dependencies>

3、编写yml配置文件

server:
  port: 8004

spring:
  application:
    name: cloud-provider-payment
  cloud:
    zookeeper:
    #192.168.96.1 本机的ip地址  2181Zookeeper端口号
      connect-string: 192.168.111.144:2181

4、主启动类

@SpringBootApplication
// @EnableDiscoveryClient适合Zookeeper或者consul作为注册中心
// @EnableDiscoveryClient注解让注册中心能够发现,扫描到该服务。
@EnableDiscoveryClient
public class PaymentMain8004 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8004.class,args);
    }
}

5、编写controller

@RestController
@Slf4j
public class PaymentController {

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

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

6、测试

  1. 启动zookeeper服务端
  2. 启动zookeeper客户端
  3. 启动cloud-provide-payment8004模块

在zookeeper客户端测试服务是否注册到zookeeper服务端中:输入``ls / 命令,发现有个services节点,在输入ls /services`命令查看services节点的信息:

在这里插入图片描述

注册成功!

访问请求http://localhost:8004/payment/zk:

在这里插入图片描述

访问成功!

2、订单服务注册进zookeeper

1、创建模块cloud-consumerzk-order80

2、导入pom依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>com.cheng.springcloud</groupId>
        <artifactId>cloud-api-commons</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>



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

3、编写yml配置文件

server:
  port: 80

spring:
  application:
    name: cloud-consumer-order
  cloud:
    zookeeper:
      #192.168.96.1 本机的ip地址  2181Zookeeper端口号
      connect-string: 192.168.96.1:2181

4、主启动类

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

5、配置restTemplate

把cloud-consumer-order80模块中的config目录拷贝到cloud-consumerzk-order80中

6、编写controller

@RestController
@Slf4j
public class OrderZkController {

    //把远程地址前缀提取出来
    public static final String REST1_URL_PREFIX = "http://cloud-provider-payment";

    @Resource
    private RestTemplate restTemplate;

    @GetMapping(value = "/consumer/payment/zk")
    public String paymentZk(){
        String result = restTemplate.getForObject(REST1_URL_PREFIX + "/payment/zk", String.class);
        return result;
    }
}

7、测试

  1. 启动zookeeper服务端
  2. 启动zookeeper客户端
  3. 启动cloud-provide-payment8004模块
  4. 启动cloud-consumerzk-order80模块

在zookeeper客户端测试服务是否注册到zookeeper服务端中:输入``ls / 命令,发现有个services节点,在输入ls /services`命令查看services节点的信息:

在这里插入图片描述

可以看到两个服务都成功注册到zookeeper中,如果想查看某个服务的具体信息,可以如下操作:

下面以cloud-provide-payment8004服务为例:

在这里插入图片描述

把红框里的json字符串利用json工具调整样式,便于服务信息的展示:

在这里插入图片描述

访问请求;http://localhost/consumer/payment/zk

在这里插入图片描述

访问成功!