一、前言
之前一直使用Eureka作为注册中心,后来发现有的公司使用Consul,有的公司使用Zookeeper了,这是什么原因呢?百度后发现Eurkea 2.x不再维护,Eurkea 1.x仍可用于生产环境。不想基于不确定的明天,那么今天就改成别的注册中心吧,比如Zookeeper,以下简称zk。
现在在Windows上安装zk已经相当简单了,在官网下载压缩包,zip、tar都可以,解压缩之后,进入bin目录,执行zkServer.cmd,默认在2181端口开启了服务,很简单吧。
我们可以使用一个叫做zktools的可视化工具,来观察zk的节点:
二、zookeeper服务注册与发现
我们只需要将我们原来的注册中Eureka换成zk就OK了。
但是需要注意的是,我们在调试的需要,需要提前关闭linux的防火墙,要不然两台服务器是不能够通信的。
三、服务提供者进zookeeper
pom文件。
<dependencies>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
<groupId>com.woxueit.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<!-- SpringBoot整合zookeeper客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</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>
<scope>test</scope>
</dependency>
</dependencies>
其实也不难发现,我们引入的其他的jar都是一样的,唯独不一样的是我们引入了springcloud整合的zk包不再引入eureka的jar包。
application.yml文件
#8004表示注册到zookeeper服务器的支付服务提供者端口号
server:
port: 8004
#服务别名----注册zookeeper到注册中心名称
spring:
application:
name: cloud-provider-payment
cloud:
zookeeper:
connect-string: 192.168.50.3:2181
主启动 PaymentMain8004
@SpringBootApplication
@EnableDiscoveryClient //该注解用于向使用consul或者zookeeper作为注册中心时注册服务
public PaymentZkMain(){
public static void main(String [] args){
SpringBootApplication.run(PaymentZkMain.class,args);
}
}
controller,这里我们的业务代码就省略掉了,因为我们这里主要是研究zk是如果作为注册中心的。
@RestController
@Slf4j
public class PaymentController
{
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/payment/zk")
public String paymentzk()
{
return "springcloud with zookeeper: "+serverPort+"\t"+ UUID.randomUUID().toString();//UUID这个是流水号,每次点击都不一样(UUID导java.uitl包的)
}
}
启动zookeeper ,然后我们登陆上去zk就发现多一个文件节点,文件名称就是我们的服务名 ,这里就不多介绍,主次分明,主要也是玩一下各个技术方案作为服务注册中心,但是目前市场上很少公司会选用zk作为服务注册中心。