Zookeeper 是第三方软件
主要存放持久化节点和临时节点,注册进去的服务就是一个临时节点
前提条件将zookeeper 所在服务器的防火墙关掉 保证可以ping通
将一个生成者服务注册到Zookeeper中步骤
- 新建springboot服务A项目,添加依赖 注意要和zookeeper的版本一致的包,否则会自动引入默认版本导致jar包冲突。
<!-- SpringBoot整合zookeeper客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<!--先排除自带的zookeeper3.5.3-->
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加zookeeper3.4.9版本 和使用的软件版本一致-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.9</version>
</dependency>
- 修改yml文件
#8004表示注册到zookeeper服务器的支付服务提供者端口号
server:
port: 8004
#服务别名----注册zookeeper到注册中心名称
spring:
application:
name: cloud-provider-payment
cloud:
zookeeper:
# ip 端口 为zookeeper所在的服务器 端口为其服务端口
connect-string: 192.168.111.144:2181
- 启动类添加 注解 @EnableDiscoveryClient. 服务发现
@SpringBootApplication
@EnableDiscoveryClient //该注解用于向使用consul或者zookeeper作为注册中心时注册服务
public class PaymentMain8004
{
public static void main(String[] args) {
SpringApplication.run(PaymentMain8004.class, args);
}
}
- 编写测试业务
@RestController
@Slf4j
public class PaymentController
{
@Value("${server.port}")
private String serverPort;
@RequestMapping(value = "/payment/zk")
public String paymentzk()
{
return "springcloud with zookeeper: "+serverPort+"\t"+ UUID.randomUUID().toString();
}
}
将一个消费者服务注册到Zookeeper服务中
和生产者类似操作:
- 添加依赖
<!-- SpringBoot整合zookeeper客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<!--先排除自带的zookeeper-->
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加zookeeper3.4.9版本-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.9</version>
</dependency>
- 修改yml文件
server:
port: 80
spring:
application:
name: cloud-consumer-order
cloud:
#注册到zookeeper地址
zookeeper:
connect-string: 192.168.111.144:2181
- 启动类添加 服务发现注解
@SpringBootApplication
@EnableDiscoveryClient
public class OrderZKMain80
{
public static void main(String[] args) {
SpringApplication.run(OrderZKMain80.class, args);
}
}
- 配置 RestTemplate 请求模版
@Configuration
public class ApplicationContextConfig
{
@Bean
// 负载均衡注解
@LoadBalanced
public RestTemplate getRestTemplate()
{
return new RestTemplate();
}
}
- 消费者业务调生成者的业务代码
@RestController
@Slf4j
public class OrderZKController
{
// 消费者 空间命名
public static final String INVOKE_URL = "http://cloud-provider-payment";
@Resource
private RestTemplate restTemplate;
@GetMapping(value = "/consumer/payment/zk")
public String paymentInfo()
{
String result = restTemplate.getForObject(INVOKE_URL+"/payment/zk",String.class);
return result;
}
}
集群的方式将注册的地址用逗号分开添加多个zookeeper的地址