目录
1.准备
依赖上一篇博客,这片博客是生产者,因为我项目是聚合项目,父项目的依赖,请到如下地址查看
https://blog.csdn.net/qq_16855077/article/details/96840346
2.代码
pom.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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.fqyd</groupId>
<artifactId>springcloud</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>com.fqyd</groupId>
<artifactId>springcloud_zk_consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springcloud_zk_consumer</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- SpringBoot整合eureka客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
<!--zk工具包-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.13</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
2.2application.yml
####订单服务器端口号
server:
port: 8001
###服务别名---服务器注册到注册中心的名称
spring:
application:
name: zk-order
cloud:
zookeeper:
#注册到zk的地址
connect-string: 127.0.0.1:2181
2.3 controller
package com.fqyd.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
/**
* Description:
* Author: wude
* Date: 2019/7/10 17:29
* Modified By:
*/
@RestController
public class OrderController {
//restTemplate是由spring web组件提供的 默认是聚合rabiion负载均衡起
//rest方式底层是采用httclient技术
@Autowired
private RestTemplate restTemplate;
/**
* 在springcloud中,又两种方式调用rest,fegin(springcloud)
* @return
*/
//订单服务调用会员服务
@RequestMapping("getOrder")
public String getOrder(){
String result = restTemplate.getForObject("http://zk-member/getMember", String.class);
//String result = restTemplate.getForObject("http://127.0.0.1:8000/getMember", String.class);
System.out.println("订单服务调用会员服务返回结果result:"+result);
return result;
};
}
http://zk-member/getMember zk-member是会员服务的名称
2.4 启动类
package com.fqyd;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableDiscoveryClient
public class SpringcloudZkConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudZkConsumerApplication.class, args);
}
/**
* 解决restTemplate bean找不到的问题,加入spring boot容器中@bean
* @return
*/
@Bean
@LoadBalanced
//如果使用restTemplate远程调用,依赖于
RestTemplate restTemplate() {
return new RestTemplate();
}
}
2.5 测试
因本文博客是测试负载均衡,因为提供者至少得2个,把zk-member项目copy一遍,修改一下端口后,就可以看到负载均衡的效果
分别启动两个zk-member项目和zk_order项目,可以看到负载均衡的效果。
假设,删除zk-member和zk-order在zk存放的这两个文件夹,会有什么现象?
会出现,删除这两个服务在zk的注册信息后,发现order项目还是可以调用成本,一段时间后,就无法访问,这是因为zk的缓存所导致的。