你好,这里是codetrend专栏"SpringCloud2023实战"。欢迎点击关注查看往期文章。
注册中心在前文提到有很多选型,在这里以Spring Cloud Zookeeper为例说明注册中心的集成和使用。
选择Spring Cloud Zookeeper作为注册中心原因如下:
- 依赖更少,只依赖zookeeper单体或集群的部署。
- 配置更通用,Eureka和zookeeper的切换只需要少量配置切换即可完成。
- 集成方便,注解通用,集成starter即可。
客户端引入
- 修改子工程的pom.xml,引入Spring Cloud Zookeeper。
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">
<parent>
<groupId>io.rainforest</groupId>
<artifactId>banana</artifactId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>banana-client1</artifactId>
<description>spring cloud banana-client1</description>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<!--注册中心客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--feign 注解依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign-core</artifactId>
<optional>true</optional>
</dependency>
<!-- 工具包依赖 -->
<dependency>
<groupId>io.rainforest</groupId>
<artifactId>banana-common-core</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-crypto</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-http</artifactId>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
启动zookeeper
- 前置条件,zookeeper依赖JVM,所以运行前得配置java环境变量。新建
JAVA_HOME
环境变量。 - 下载zookeeper安装包,linux和windows的版本是同一个。 官方网站是: zookeeper.apache.org/releases.ht...
- 目录格式如下
shell
|-- LICENSE.txt
|-- NOTICE.txt
|-- README.md
|-- README_packaging.md
|-- bin
|-- conf
|-- data
|-- docs
|-- lib
- 修改配置文件,此处为单体非集群版配置,在
conf/zoo.cfg
。
shell
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=E:/DevTool/apache-zookeeper-3.8.2-bin/data
# the port at which the clients will connect
clientPort=2181
- 启动zookeeper。
shell
# windows系统
bin\zkServer.cmd
# Linux系统
bin\zkServer.sh
启动应用
- 在启动类上增加注解,进行服务发布。
java
package io.rainforest.banana.client1;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- 修改应用配置。
yaml
spring.application.name: client1
spring:
cloud:
zookeeper:
connect-string: localhost:2181 ## 注册中心的配置
server:
port: 10101
servlet:
context-path: /client1
- 启动应用之前先启动zookeeper。
查看注册数据
shell
get /services/client1/b257e7f5-a451-4119-ba20-e7622f3aeaba
{"name":"client1","id":"b257e7f5-a451-4119-ba20-e7622f3aeaba","address":"cat","port":10101,"sslPort":null,"payload":{"@class":"org.springframework.cloud.zookeeper.discovery.ZookeeperInstance","id":"client1","name":"client1","metadata":{"instance_status":"UP"}},"registrationTimeUTC":1698715221404,"serviceType":"DYNAMIC","uriSpec":{"parts":[{"value":"scheme","variable":true},{"value":"://","variable":false},{"value":"address","variable":true},{"value":":","variable":false},{"value":"port","variable":true}]}}
默认的zookeeper注册中心的数据放在 /services/客户端名称/实例名称
。
源码信息
和"SpringCloud实战"对应的源码信息如下:
- github github.com/r0ad/spring...
- gitee gitee.com/r0ad/spring...
关于作者
来自一线全栈程序员nine的八年探索与实践,持续迭代中。欢迎关注公众号"雨林寻北"或添加个人卫星codetrend(备注技术)。