zookeeper作为注册中心集群版
服务提供者集群
1、建moudle
cloud-providerzk-payment8004
cloud-providerzk-payment8005
cloud-providerzk-payment8006
2、改pom
每个项目的依赖都是相同的
springboot与cloud的版本为
<spring.boot.version>2.2.2.RELEASE</spring.boot.version>
<spring.cloud.version>Hoxton.SR1</spring.cloud.version>
依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--SpringBoot整合Zookeeper客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<exclusions>
<!--先排除自带的zookeeper3.5.3-->
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加zookeeper3.4.14版本-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</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>
3、写yml
每一个项目的配置文件都大致相同,只有port不同 8004/8005/8006
server:
port: 8004
#服务别名 ---注册zookeeper到服务中心
spring:
application:
name: cloud-provider-payment
cloud:
zookeeper:
connect-string: 192.168.127.84:2181
4、主启动
新建com.lejia.springcloud包
主启动类 PaymentMain8005.java
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain8005 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8005.class, args);
}
}
5、业务类
controller.PaymentController.java
@RestController
@RequestMapping("/payment")
@Slf4j
public class PaymentController {
@Value("${server.port}")
private String serverPort;
//暴露给用户的接口
@GetMapping(value="/zk")
public String paymentzk(){
return "SpringCloud with zookeeper:"+serverPort+"\t"+ UUID.randomUUID().toString();
}
}
6、启动
8004 / 8005 / 8006 (笔者这里8006端口被占用了,暂时使用8008)
7、项目结构图
服务消费者
1、建model
cloud-consumerzk-order80
2、改pom
<dependencies>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--SpringBoot整合Zookeeper客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<exclusions>
<!--先排除自带的zookeeper3.5.3-->
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加zookeeper3.4.9版本-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.9</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</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>
3、写yml
server:
port: 80
#服务别名 ---注册zookeeper到服务中心
spring:
application:
name: cloud-consumer-order
cloud:
zookeeper:
connect-string: 192.168.127.84:2181
4、主启动
@SpringBootApplication
@EnableDiscoveryClient
public class OrderZKMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderZKMain80.class, args);
}
}
5、业务类
配置类
新建config包
新建配置类ApplicationContextConfig.claas
创建RestTemplate对象进行远程服务的调用
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
控制层
新建controller包
新建服务消费者方法,并远程调用提供者的服务
@RestController
@Slf4j
@RequestMapping("/consumer")
public class OrderZKController {
private final String INVOCATION_URL = "http://cloud-provider-payment";
@Resource
private RestTemplate restTemplate;
@GetMapping("/payment/zk")
public String payment(){
return restTemplate.getForObject(INVOCATION_URL+"/payment/zk", String.class);
}
}
6、启动
7、项目结构图
测试
http://localhost/consumer/payment/zk
当我们调用消费者服务接口时,成功的访问到了服务端提供的集群服务
对于访问策略这方面,后续待我们学习了ribbon后可以再将其根据具体的情况来设置!