Zookeeper整合SpringCloud的基本使用
首先通过一下地址下载Zookeeper
https://zookeeper.apache.org/releases.html
下载完成后找到并运行zookeeper的bin目录下的zkServer.cmd和zkCli.cmd即可开启zookeeper(不过zookeeper没有图形界面)
新建支付Module
导入POM
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<version>2.1.2.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<!-- 与服务器安装的Zookeeper版本相同 -->
<version>3.4.12</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
特别注意: 此处的zookeeper版本要与自己安装的一致
编写yml
server:
port: 8004
spring:
application:
name: cloud-provider-payment
cloud:
zookeeper:
discovery:
enabled: true #允许向zookeeper注册服务
register: true
connect-string: 127.0.0.1:2181
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 当前数据源操作类型
driver-class-name: org.gjt.mm.mysql.Driver # mysql驱动包
url: jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
username: root
password: 990613
mybatis:
mapperLocations: classpath:mapper/*.xml
type-aliases-package: com.hfz.springcloud.entities # 所有Entity别名类所在包
注意数据库url处的时区问题,添加serverTimezone=GMT%2B8
可以避免时区问题引起的错误
编写主启动类
@SpringBootApplication
@EnableDiscoveryClient //能够让注册中心发现自己,与@EnableEurekaClient不同
public class PaymentMain8004 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8004.class,args);
}
}
业务类
controller层
@RestController
@Slf4j
public class PaymentController
{
@Value("${server.port}")
private String serverPort; //把yml中的端口号赋值给它
@RequestMapping(value = "/payment/zk")
public String paymentzk()
{
return "springcloud with zookeeper: "+serverPort+"\t"+ UUID.randomUUID().toString();
}
}
订单消费模块编写
新建Module
导入POM
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<version>2.1.2.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<!-- 与服务器安装的Zookeeper版本相同 -->
<version>3.4.12</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
编写yml
server:
port: 80 #端口号
spring:
application:
name: cloud-consumer-order #服务名
cloud:
zookeeper:
connect-string: 127.0.0.1:2181 #注册中心
编写主启动类
@SpringBootApplication
@EnableDiscoveryClient
public class OrderZkMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderZkMain80.class,args);
}
}
业务类
因不涉及其他的增删改查等操作,只需要一个controller层即可
controller层
@RestController
public class OrderZkController {
public static final String INVOKE_URL="http://cloud-provider-payment";
@Resource
private RestTemplate restTemplate;
@GetMapping(value = "/consumer/payment/zk")
public String PaymentInfo(){
String result=restTemplate.getForObject(INVOKE_URL+"/payment/zk",String.class);
return result;
}
}
使用了RestTemplate需要向spring容器中注入它的bean
编写配置类完成注入
@Configuration
public class ApplicationContextConfi {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}