zookeeper作为注册中心
简介:zookeeper是分布式协调工具,利用其特新可作为注册中心。
工具资源下载百度云链接:https://pan.baidu.com/s/1nhOr7zWByK7Poo7ZhuoKeQ 提取码:8hb1
请下载 客户端工具:ZooInspector.zip zookeeper:zookeeper-3.3.6.zip
1. zookeeper-3.3.6.zip下载后解压,启动zookeeper,在bin目录下双击zkServer.cmd,启动后的结果如图:
2. 解压客户端工具 ZooInspector.zip,启动客户端工具,连接zookeeper,在build目录下双击zookeeper-dev-ZooInspector.jar, 如图:
配置连接信息,如图:
连接成功后:
3. zookeeper启动成功后,开始写代码。
3.1 创建 springcloud_zookeeper,导入maven依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.10.RELEASE</version>
</parent>
<!-- 管理依赖 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.M7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot整合zookeeper -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
</dependencies>
<!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
3.2 在上面的项目中创建module:zk_member(会员服务)
3.2.1 maven依赖导入:
<!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
3.2.2 配置yml文件:
###会员服务的端口号
server:
port: 8002
###服务别名----服务注册到注册中心名称
spring:
application:
name: zk-member
cloud:
zookeeper:
connect-string: 127.0.0.1:2181
3.2.3 创建启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class MemberApp {
public static void main(String[] args) {
SpringApplication.run(MemberApp.class, args);
}
}
在eureka中的启动类是使用@EnableEurekaClient,使用zookeeper或consul作为注册中心时要换成@EnableDiscoveryClient
3.2.4 controller层
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("member")
public class MemberController {
@RequestMapping("getMember")
public String getMember() {
return "Success!";
}
}
3.3 在上面的项目中创建module:zk-order(订单服务)
3.3.1 导入maven依赖
<!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
3.3.2 配置yml文件
###订单服务的端口号
server:
port: 8003
###服务别名----服务注册到注册中心名称
spring:
application:
name: zk-order
cloud:
zookeeper:
connect-string: 192.168.0.112:2181
3.3.3 启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableDiscoveryClient
public class OrderApp {
public static void main(String[] args) {
SpringApplication.run(OrderApp.class, args);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
3.3.4 controller层
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.List;
@RestController
@RequestMapping("order")
public class OrderController {
@Autowired
private DiscoveryClient discoveryClient;
@Autowired
private RestTemplate restTemplate;
@RequestMapping("getOrder")
public String getOrder() {
String serviceUrl = getServiceUrl("zk-member") + "/member/getMember";
String result = restTemplate.getForObject(serviceUrl, String.class);
System.out.println("订单服务调用会员服务:" + result);
return result;
}
private String getServiceUrl(String serviceId) {
List<ServiceInstance> services = discoveryClient.getInstances(serviceId);
if (!services.isEmpty()) {
return services.get(0).getUri().toString();
}
return null;
}
}
分别启动订单服务和会员服务,查看zookeeper的节点如图:
用zookeeper作为注册中心时,服务启动后会自动在zk上创建临时节点。
访问订单服务,看是否能调用到会员服务,结果如图:
从以上的2个图中可看出利用zk作为注册中心,远程调用服务成功!
consul作为注册中心
工具资源下载百度云链接:https://pan.baidu.com/s/1nhOr7zWByK7Poo7ZhuoKeQ 提取码:8hb1
下载consul的windows版本,也可到官网下载。
下载后进行解压,然后使用cmd启动consul,命令为 ./consul.exe agent -dev -ui -node=cy
参数说明 -dev开发服务器模式启动,-node结点名为cy,-ui可以用界面访问,默认能访问。
启动后如图:
访问默认地址:http://127.0.0.1:8500/
代码我在上面的zk项目中进行修改:
1. 修改maven依赖,将整合consul的依赖替换zk的依赖
<!-- SpringBoot整合zookeeper -->
<!--<dependency>-->
<!--<groupId>org.springframework.cloud</groupId>-->
<!--<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>-->
<!--</dependency>-->
<!-- SpringBoot整合consul -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
2. 修改yml文件
###服务别名----服务注册到注册中心名称
#spring:
# application:
# name: zk-member
# cloud:
# zookeeper:
# connect-string: 192.168.0.112:2181
###订单服务的端口号
server:
port: 8002
spring:
application:
name: consul-member
cloud:
consul:
host: localhost
port: 8500
discovery:
hostname: 192.168.0.112
###订单服务的端口号
server:
port: 8003
###服务别名----服务注册到注册中心名称
#spring:
# application:
# name: zk-order
# cloud:
# zookeeper:
# connect-string: 192.168.0.112:2181
spring:
application:
name: consul-order
cloud:
consul:
host: localhost
port: 8500
discovery:
hostname: 192.168.0.112
注意:订单服务中调用会员服务的serviceid也需根据yml进行修改
3. 启动项目,效果如图: