1.安装Zookeeper注册中心
2.导入Zookeeper客户端依赖
<!--zookeeper client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
3.配置使用zookeeper
先配置yml配置文件
spring:
application:
name: cloud-payment-service
cloud:
zookeeper:
#配置zookeeper服务地址
connect-string: localhost:2181
server:
port: 8014
然后在主启动类上加入@EnableDiscoveryClient
注解
@SpringBootApplication
@EnableDiscoveryClient//此注解主要用于zookeeper和consul作为注册中心时注册服务
public class CloudProviderPayment8014Application {
public static void main(String[] args) {
SpringApplication.run(CloudProviderPayment8014Application.class, args);
}
}
编写一个控制器类进行测试
@RestController
@Slf4j
@RequestMapping("/payment")
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@GetMapping("/zkpayment")
public String zkPayment(){
return "Spring Cloud with Zookeeper , server port:"+serverPort;
}
}
然后开启项目,此时打开zookeeper的bin目录下的zkCli,输入ls / 在输入 ls /services,即可查看注册进zookeeper的所有服务。
注册进zookeeper的服务节点是属于一个临时节点,只要一段时间内没有收到心跳包,就会移除掉这个服务
4.将消费者服务注册进zookeeper
依赖跟刚创建的消费者模块一样,配置文件将项目的端口改成9011,应用名称改成cloud-consumerzk-order
,然后新建一个配置类,用于注册bean组件进ioc容器,注册restTemplate进容器,因为还没有使用ribbon,所以需要先用restTemplate进行测试,注意需要加上@LoadBalanced
注解开启负载均衡
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
然后编写控制器类进行测试
@RestController
@Slf4j
@RequestMapping("/consumer/payment")
public class PaymentController {
/**要调用的服务地址*/
public static final String INVOKE_URL="http://cloud-payment-service";
@Autowired
private RestTemplate restTemplate;
@GetMapping("/zk")
public String paymentInfo(){
String result=restTemplate.getForObject(INVOKE_URL+"/payment/zkpayment",String.class);
return result;
}
}
启动消费者项目进行测试,先查看zookeeper是否注册进去消费者服务,可见注册成功
再访问请求地址,可以见到成功调用了提供者的对应服务。