《springcloud学习》八 Springcloud整合zookeeper作为注册中心

目录

1 描述

            1.1  疑问

            1.2准备

2.zk代码

          2.1zookeeper下载            

              2.2父项目依赖

             2.3  pom.xml

              2.4  application.yml

                2.5  controller

                2.6 启动类

扫描二维码关注公众号,回复: 8686156 查看本文章

             2.7效果


1 描述

            1.1  疑问

                   为什么要采用zookeeper作为注册中心?

                   那是因为eurake2.0开始,就闭源勒,当然,注册中心闭源,对我们开发来说,影响不大

                  zk是什么节点类型?临时或者持久?

                  临时节点。服务一关闭,过一段时间就会自己删除。

            1.2准备

                    下载:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip 

                     方便查看zk的内容

2.zk代码

          2.1zookeeper下载            

zookeeper官网下载地址

              2.2父项目依赖

                   pom.xml

<?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">
    <modelVersion>4.0.0</modelVersion>

    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.4.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

    <groupId>com.fqyd</groupId>
    <artifactId>springcloud</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    </properties>
    <modules>
        <module>springcloud_eureka</module>
        <module>springcloud_eureka_ha</module>
        <module>springcloud_product</module>
        <module>springcloud_product_member</module>
        <module>springcloud_consumer</module>
        <module>springcloud_zk_member</module>
    </modules>

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

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

    <!-- Spring Cloud 管理依赖 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

             2.3  pom.xml

<?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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.fqyd</groupId>
        <artifactId>springcloud</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <groupId>com.fqyd</groupId>
    <artifactId>springcloud_zk_member</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springcloud_zk_member</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!-- SpringBoot整合eureka客户端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        </dependency>

        <!--zk工具包-->
        <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>
    </dependencies>
</project>

注意这里导入的zk的版本,应该与zk服务的版本一样,我之前只导入了spring-cloud-starter-zookeeper-discovery依赖,实际上他对应的版本是4.0以上的,为了跟服务器的zk保持一致,我们应该明确版本 

              2.4  application.yml

###会员服务的端口号
server:
  port: 8002
###服务别名----服务注册到注册中心名称
spring:
  application:
    name: zk-member
  cloud:
    zookeeper:
      #注册到zk的地址
      connect-string: 127.0.0.1:2181

                2.5  controller

package com.fqyd.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Description:
 * Author: wude
 * Date:  2019/7/10 16:44
 * Modified By:
 */
@RestController
public class MeberApiController {
    @Value("${server.port}")
    private String port;
    @RequestMapping("getMember")
    public  String getMember(){
        return "this is member!端口号为:"+port;
    }
}

                2.6 启动类

package com.fqyd;

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

@SpringBootApplication
@EnableDiscoveryClient   //如果服务注册是consul或者zk,可以使用该注解
public class SpringcloudZkMemberApplication {

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

}

             2.7效果

这里的zk-member就是我服务器指定的服务名

 

如果我强制关闭zk-member服务,会出现什么问题?

强制关闭zk-member服务后,该页面还是可以查看到该服务器的一些信息,需要等待一段时间左右,才会清理该服务的信息,这是因为zk,需要间隔一段时间,给zk-member包,也就是我们所说的心跳,这也是我博客开头所说的zk是临时节点,而不是永久节点,服务一关闭,他对应的信息也会消失。

 

{
	"name": "zk-member",
	"id": "506b477c-99ef-47b2-9ff8-cbf02e20bcfd",
	"address": "DESKTOP-8S3CENH",
	"port": 8002,
	"sslPort": null,
	"payload": {
		"@class": "org.springframework.cloud.zookeeper.discovery.ZookeeperInstance",
		"id": "application-1",
		"name": "zk-member",
		"metadata": {}
	},
	"registrationTimeUTC": 1563779355524,
	"serviceType": "DYNAMIC",
	"uriSpec": {
		"parts": [{
			"value": "scheme",
			"variable": true
		}, {
			"value": "://",
			"variable": false
		}, {
			"value": "address",
			"variable": true
		}, {
			"value": ":",
			"variable": false
		}, {
			"value": "port",
			"variable": true
		}]
	}
}
发布了263 篇原创文章 · 获赞 366 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/qq_16855077/article/details/96840346