创建项目
使用 Spring Initializr
新建一个项目命名为: springcloud-zookeeper
,删除多余的文件,并新建两个子模块分别为:springcloud-zookeeper-member
、springcloud-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
*/@RestController
public 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
@SpringBootApplication
public 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
*/@RestController
public 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
@EnableDiscoveryClient
public 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.java
和 AppOrder.java
查看zookeeper上新注册了两个临时节点
浏览器访问 http://localhost:7002/getOrderorder服务可以调用到member服务。
读者也可以给member服务做集群,启动多个member服务,实现负载均衡。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。