创立我的项目

应用 Spring Initializr 新建一个我的项目命名为: springcloud-zookeeper,删除多余的文件,并新建两个子模块别离为:springcloud-zookeeper-memberspringcloud-zookeeper-order

父工程 pom.xml配置文件spring-boot 版本这里选用 2.0.1.RELEASE

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <packaging>pom</packaging> <modules> <module>springcloud-zookeeper-member</module> <module>springcloud-zookeeper-order</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.baba.wlb</groupId> <artifactId>springcloud-zookeeper</artifactId> <version>1.0-SNAPSHOT</version> <name>springcloud-zookeeper</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</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> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build></project>

子模块

springcloud-zookeeper-member模块:

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"> <parent> <artifactId>springcloud-zookeeper</artifactId> <groupId>com.baba.wlb</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>springcloud-zookeeper-member</artifactId> <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> <!--springcloud 整合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></project>

application.yml配置文件:

##服务器端口号server:  port: 7001##dubbo 注册到注册核心的名称spring:  application:    name: zk-member  cloud:    zookeeper:      connect-string: 39.102.56.91:2181

MemberApiController 管制页面:

package com.baba.wlb.controller;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/** * @Author wulongbo * @Date 2021/1/9 15:20 * @Version 1.0 */@RestControllerpublic class MemberApiController {    @Value("${server.port}")    private String serverPort; @RequestMapping("/getMember")    public String getMember() {        return "我是会员服务!端口号:"+serverPort; }}

AppMember 启动类:

package com.baba.wlb.controller;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/** * @Author wulongbo * @Date 2021/1/9 15:22 * @Version 1.0 */@EnableDiscoveryClient@SpringBootApplicationpublic class AppMember {    // @EnableDiscoveryClient作用是 如果服务应用zookeeper或者connsul,应用@EnableDiscoveryClient向注册核心注册服务 public static void main(String[] args) {        SpringApplication.run(AppMember.class,args); }}

springcloud-zookeeper-order模块:

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"> <parent> <artifactId>springcloud-zookeeper</artifactId> <groupId>com.baba.wlb</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>springcloud-zookeeper-order</artifactId> <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> <!--springcloud 整合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></project>

application.yml配置文件:

##服务器端口号server:  port: 7002##dubbo 注册到注册核心的名称spring:  application:    name: zk-order  cloud:    zookeeper:      connect-string: 39.102.56.91:2181

OrderApiController 管制页面:

package com.baba.wlb.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;/** * @Author wulongbo * @Date 2021/1/9 15:32 * @Version 1.0 */@RestControllerpublic class OrderApiController {    @Autowired private RestTemplate restTemplate; /** * springCloud中,两种形式调用(rest/feign) * * @return */ // 订单服务调用会员服务 @RequestMapping("/getOrder")    public String getOrder() {        // 有两种调用形式,一种是采纳服务别名形式调用,另一种是应用别名去注册核心上获取对应服务调用地址 // 第一种形式 String url = "http://dy-202006281547:8000/getMember"; // 第二种形式 url = "http://zk-member/getMember"; String result = restTemplate.getForObject(url, String.class); return "订单服务调用会员服务:" + result; }}

AppOrder.java 启动类:

package com.baba.wlb.controller;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;/** * @Author wulongbo * @Date 2021/1/9 15:39 * @Version 1.0 */@SpringBootApplication@EnableDiscoveryClientpublic class AppOrder {    public static void main(String[] args) {        SpringApplication.run(AppOrder.class,args); // 第二种形式 如果应用rest形式以别名形式进行调用依赖ribbon负载均衡器 // 第二种形式 @LoadBalanced能让restTemplate 模板在申请时领有客户端负载平衡的能力 }    // 解决RestTemplate 找不到起因, 把RestTemplate注册到Springboot容器中 @Bean // 第一种形式//    @Bean//    RestTemplate restTemplate(){//        return new RestTemplate();//    } // 第二种形式 @LoadBalanced能让restTemplate 模板在申请时领有客户端负载平衡的能力 @Bean @LoadBalanced RestTemplate restTemplate(){        return new RestTemplate(); }}

启动我的项目

启动 AppMember.javaAppOrder.java

查看zookeeper上新注册了两个长期节点

浏览器拜访 http://localhost:7002/getOrderorder服务能够调用到member服务。

读者也能够给member服务做集群,启动多个member服务,实现负载平衡。