SpringCloud整合Zookeeper

创建项目

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

父工程 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模块:

image.png

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模块:

image.png

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.javaAppOrder.java

image.png

image.png

查看zookeeper上新注册了两个临时节点
image.png

浏览器访问 http://localhost:7002/getOrderorder服务可以调用到member服务。
image.png
读者也可以给member服务做集群,启动多个member服务,实现负载均衡。

你可能感兴趣的:(javaspringboot)