在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项目