zoukankan      html  css  js  c++  java
  • 以zookeeper为注册中心搭建spring cloud环境

    在spring cloud体系中,有多种手段实现注册中心,本例中采用zookeeper作为注册中心的角色。服务提供者向zookeeper注册,服务消费者从zookeeper中发现服务提供者的相关信息,从而远程调用服务提供方。

    spring cloud与zookeeper的集成主要依赖spring-cloud-starter-zookeeper-discovery模块,下面是实例:

    1、服务提供者zktest

    引入相关依赖pom.xml

    <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>
        <groupId>com.dxz.zktestclient</groupId>
        <artifactId>zktestclient</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.3.5.RELEASE</version>   <!--配合spring cloud版本 -->
            <relativePath /> <!-- lookup parent from repository -->
        </parent>
        <properties>
            <!--设置字符编码及java版本 -->
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <java.version>1.8</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zookeeper-discovery</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-starter-parent</artifactId>
                    <version>Brixton.SR3</version>   <!--官网为Angel.SR4版本,但是我使用的时候总是报错 -->
                    <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>

    启动类

    package com.dxz.zktest;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @EnableDiscoveryClient
    @SpringBootApplication
    public class ZktestApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ZktestApplication.class, args);
        }
    }

    配置信息

    1、application.properties

    server.port=8822
    spring.application.name=zktest

    2、bootstrap.properties

    spring.cloud.zookeeper.connectString=192.168.5.14:2181
    spring.cloud.zookeeper.discovery.instanceHost=192.168.5.3
    spring.cloud.zookeeper.discovery.instancePort=${server.port}

    2、服务消费者zktestClient

    <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>
        <groupId>com.dxz.zktestclient</groupId>
        <artifactId>zktestclient</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.3.5.RELEASE</version>   <!--配合spring cloud版本 -->
            <relativePath /> <!-- lookup parent from repository -->
        </parent>
        <properties>
            <!--设置字符编码及java版本 -->
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <java.version>1.8</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zookeeper-discovery</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-starter-parent</artifactId>
                    <version>Brixton.SR3</version>   <!--官网为Angel.SR4版本,但是我使用的时候总是报错 -->
                    <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>

    启动类

    package com.dxz.zktestclient;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.DiscoveryClient;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    @RestController
    public class ZktestClientApplication {
    
        @Autowired
        private LoadBalancerClient loadBalancer;
    
        @Autowired
        private DiscoveryClient discovery;
    
        @RequestMapping("/discovery")
        public Object discovery() {
            System.out.println(loadBalancer.choose("zktest"));
            return "discovery";
        }
    
        @RequestMapping("/all")
        public Object all() {
            System.out.println(discovery.getServices());
            return "all";
        }
    
        public static void main(String[] args) {
            SpringApplication.run(ZktestClientApplication.class, args);
        }
    }

    配置信息

    1、application.properties

    server.port=8844
    spring.application.name=zktestclient

    2、bootstrap.properties

    spring.cloud.zookeeper.connectString=192.168.5.14:2181
    spring.cloud.zookeeper.discovery.register=false

    3、zookeeper环境搭建

    3.1、zookeeper安装

    http://mirrors.shuosc.org/apache/zookeeper/zookeeper-3.4.11/

    见《zk 03之 linux上的zookeeper单机与伪集群安装

    4、测试

    启动zookeeper后, 先启动zktest项目,日志如下

    查看zookeeper的节点情况,

    在zookeeper所在bin目录下, 执行如下命令

    [root@localhost bin]# ./zkCli.sh -server localhost,登录成功会展示如下:

    查看zookeeper上的"/services/zktest"目录

    [zk: localhost(CONNECTED) 1] ls /services/zktest
    [22aa5d6a-f8a9-4053-bdc4-1b926ddc10b4]
    [zk: localhost(CONNECTED) 2] 

    启动zktestClient项目

     
  • 相关阅读:
    Docker基本概念
    Docker 基本指令整理(一)
    其他软件技巧收藏
    Java ThreadPool的正确打开方式花钱的年华 | 江南白衣(5星推荐)
    java主线程等待所有子线程执行完毕在执行(常见面试题)
    (个人)Zookeeper集群环境部署
    linux下git怎么保存账号密码
    PHP跳出循环的方法及continue、break、exit的区别
    Linux 安装composer
    MySQL 删除数据库中重复数据方法
  • 原文地址:https://www.cnblogs.com/duanxz/p/7063262.html
Copyright © 2011-2022 走看看