zookeeper作为服务注册中心

客户端消费者

pom, 排除依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud2020</artifactId>
        <groupId>top.bitqian</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-consumerzk-order80</artifactId>

    <dependencies>
        <dependency>
            <groupId>top.bitqian</groupId>
            <artifactId>cloud-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-starter-actuator</artifactId>
        </dependency>

        <!-- 服务发现 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
            <!--排除zk3.5.3-->
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!--添加zk 3.4,9版本-->
        <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.9</version>
        </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>


</project>

yaml 入驻zk

server:
  port: 80

# 服务名
spring:
  application:
    name: cloud-consumer-order

  # zk 地址
  cloud:
    zookeeper:
      connect-string: 127.0.0.1:2181

主启动

package top.bitqian.springcloud;

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

/**
 * @author echo lovely
 * @date 2020/12/6 10:17
 */

// 开启服务发现
@EnableDiscoveryClient
@SpringBootApplication
public class OrderZKMain80 {
    
    

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

}

配置restTemplate + ribbon负载均衡调用服务提供者

package top.bitqian.springcloud.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

/**
 * @author echo lovely
 * @date 2020/12/6 10:18
 */

@Configuration
public class ApplicationContextConfig {
    
    

    // loadBalanced 赋予restTemplate负载均衡的能力
    @LoadBalanced
    @Bean
    public RestTemplate getRestTemplate() {
    
    

        // 用于远程调用另一个微服务
        return new RestTemplate();
    }

}

调用实现

package top.bitqian.springcloud.controller;

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

import javax.annotation.Resource;

/**
 * 通过zk远程调用8004
 * @author echo lovely
 * @date 2020/12/6 10:18
 */

@RestController
@Slf4j
public class PaymentController {
    
    

    @Resource
    private RestTemplate restTemplate;

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

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

        // 调用cloud-provider-payment服务的controller 地址
        String result = restTemplate.getForObject(INVOKE_URL + "/payment/zk", String.class);

        log.info("res---------->" + result);

        return result;
    }

}

服务提供者

pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud2020</artifactId>
        <groupId>top.bitqian</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <!-- zookeeper client~ -->
    <artifactId>cloud-provider-payment8004</artifactId>

    <dependencies>

        <dependency>
            <groupId>top.bitqian</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- 新增zookeeper服务注册中心 -->

        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-zookeeper-discovery -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
            <!--排除zk3.5.3-->
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!--添加zk 3.4,9版本-->
        <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.9</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>


    </dependencies>


</project>

yaml

# zookeeper client 8004~
server:
  port: 8004

spring:
  application:
    name: cloud-provider-payment # 服务别名,注册zookeeper到服务注册中心

  cloud:
    zookeeper:
      connect-string: 47.99.161.195:2181

mainboot

package top.bitqian.springcloud;

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

/**
 * @author echo lovely
 * @date 2020/12/3 21:43
 */

// 表示 用于向使用consul或者zookeeper作为注册中心时注册服务~
@EnableDiscoveryClient
@SpringBootApplication
public class PaymentMain8004 {
    
    

    // 测试,断掉客户端时, zookeeper不会立即干掉服务。会等客户端连接上, 过一会连接不上 会干掉服务。
    // 是临时结点。
    public static void main(String[] args) {
    
    
        SpringApplication.run(PaymentMain8004.class, args);
    }

}

提供被调用的服务

package top.bitqian.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 echo lovely
 * @date 2020/12/3 21:48
 */

@RestController
@Slf4j
public class PaymentController {
    
    

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

    @RequestMapping("/payment/zk")
    public String getPaymentZooKeeper()
    {
    
    
        log.info("get server info ~");
        return "client port--> " + port + " \t" + UUID.randomUUID();
    }

}

linux命令查看zk的服务,结点信息

    zookeeper启动
     1. ./zkServer.sh start
     2. ./zkCli.sh   # 连接服务~

     ls / # 查看结点

     get /zookeeper

     ls /zookeeper # 查看当前服务的结点

     ls /services # 查看服务

     ls /services/cloud-provider-payment # 查看当前服务的流水号~

     get /services/cloud-provider-payment/fiururr-jgtr009-jngg9 # 查看具体某个服务的服务信息

     {
    
    
     "name": "cloud-provider-payment",
     "id": "0301d874-94d8-4115-b04d-b3e107cad26a",
     "address": "192.168.0.167",
     "port": 8004,
     "sslPort": null,
     "payload": {
    
    
     "@class": "org.springframework.cloud.zookeeper.discovery.ZookeeperInstance",
     "id": "application-1",
     "name": "cloud-provider-payment",
     "metadata": {
    
    }
     },
     "registrationTimeUTC": 1607004949029,
     "serviceType": "DYNAMIC",
     "uriSpec": {
    
    
     "parts": [
     {
    
    
     "value": "scheme",
     "variable": true
     },
     {
    
    
     "value": "://",
     "variable": false
     },
     {
    
    
     "value": "address",
     "variable": true
     },
     {
    
    
     "value": ":",
     "variable": false
     },
     {
    
    
     "value": "port",
     "variable": true
     }
     ]
     }
     }

猜你喜欢

转载自blog.csdn.net/qq_44783283/article/details/110910220