创建项目
使用 Spring Initializr
新建一个项目命名为: springcloud-zookeeper
,删除多余的文件,并新建两个子模块分别为:springcloud-zookeeper-member
、springcloud-zookeeper-order
父工程 pom.xml
配置文件spring-boot
版本这里选用 2.0.1.RELEASE
4.0.0
pom
springcloud-zookeeper-member
springcloud-zookeeper-order
org.springframework.boot
spring-boot-starter-parent
2.0.1.RELEASE
com.baba.wlb
springcloud-zookeeper
1.0-SNAPSHOT
springcloud-zookeeper
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
org.projectlombok
lombok
子模块
springcloud-zookeeper-member
模块:
pom.xml
文件:
springcloud-zookeeper
com.baba.wlb
1.0-SNAPSHOT
4.0.0
springcloud-zookeeper-member
org.springframework.cloud
spring-cloud-dependencies
Finchley.M7
pom
import
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-zookeeper-discovery
spring-milestones
Spring Milestones
https://repo.spring.io/libs-milestone
false
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
文件
springcloud-zookeeper
com.baba.wlb
1.0-SNAPSHOT
4.0.0
springcloud-zookeeper-order
org.springframework.cloud
spring-cloud-dependencies
Finchley.M7
pom
import
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-zookeeper-discovery
spring-milestones
Spring Milestones
https://repo.spring.io/libs-milestone
false
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服务,实现负载均衡。