Kite的学习历程之SpringCloud之EurekaServer集群配置,服务端集群配置并且使其负载均衡
Kite学习框架的第二十一天
1. EurekaServer集群配置
首先在C:\Windows\System32\drivers\etc下的hosts配置文件中配置映射
1.1 创建第一个注册中心cloud-eureka-server7001
1.1.1 pom.xml依赖文件的导入
这里注意导入:
spring-cloud-netflix-eureka-server
<?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>demo01cloud</artifactId>
<groupId>cn.kitey.spring</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-eureka-server7001</artifactId>
<dependencies>
<!-- Eureka Server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!--引入自己创建的entities包-->
<dependency>
<groupId>cn.kitey.spring</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</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>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-server</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-server</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-server</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-server</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-server</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-server</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-server</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
</dependencies>
</project>
1.1.2 配置application.yml
这里设置的端口为:7001
这里使用的hostname就是前面配置的映射
注册路径为:http://eureka7002.com:7002/eureka/
server:
port: 7001
eureka:
instance:
hostname: eureka7001.com #eureka服务端的实例名称
client:
#false标识不向注册中心注册自己
register-with-eureka: false
#标示自己就是注册中心,我的职责就是维护服务实例,并不需要区检索服务
fetch-registry: false
service-url:
defaultZone: http://eureka7002.com:7002/eureka/
1.1.3 创建主启动类
注意添加注解
EnableEurekaServer: 表明为Server注册中心
package cn.kitey.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaMain7001 {
public static void main(String[] args) {
SpringApplication.run(EurekaMain7001.class, args);
}
}
1.2 创建第二个注册中心cloud-eureka-server7002
1.2.1 pom.xml依赖文件的导入
与cloud-eureka-server7001引入的一样
1.2.2 配置application.yml
- 端口改为:7002
- hostname改为:eureka7002.com
- zhuvedefaultZone: http://eureka7001.com:7001/eureka/
server:
port: 7002
eureka:
instance:
hostname: eureka7002.com #eureka服务端的实例名称
client:
#false标识不向注册中心注册自己
register-with-eureka: false
#标示自己就是注册中心,我的职责就是维护服务实例,并不需要区检索服务
fetch-registry: false
service-url:
zhuvedefaultZone: http://eureka7001.com:7001/eureka/
1.3.3 创建主启动类
注意添加注解:
@EnableEurekaServer
package cn.kitey.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaMain7002 {
public static void main(String[] args) {
SpringApplication.run(EurekaMain7002.class, args);
}
}
1.3 可以进行访问一下检测EurekaServer集群配置是否配置完成
- 访问:http://eureka7001.com:7001/
注意已经有了7002 注册中心
- 访问:http://eureka7002.com:7002/
注意已经有了7001 注册中心
表明EurekaServer集群配置创建成功!
2.服务端集群配置
2.1 首相将前面创建的cloud-provider-payment-8001 注册进EurekaServer
前面讲述了cloud-provider-payment-8001的创建了,这里就不多讲述
8001创建过程
2.1.1 配置application.yml文件
注意:
这里注册eureka的地址为集群
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
server:
port: 8001
spring:
application:
name: cloud-payment-service
datasource:
type: com.alibaba.druid.pool.DruidDataSource #当前数据源的操作类型
driver-class-name: com.mysql.jdbc.Driver #mysql驱动包
url: jdbc:mysql:///db2020?characterEncoding=utf8&serverTimezone=GMT%2B8
username: root
password: 25002500
jpa:
show-sql: true
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: cn.kitey.springcloud.entities #所有的Entity所在的包
eureka:
client:
register-with-eureka: true # 是否注册自己的信息到EurekaServer,默认是true
fetch-registry: true # 是否拉取其它服务的信息,默认是true
service-url: # EurekaServer的地址,现在是自己的地址,如果是集群,需要加上其它Server的地址。
# defaultZone: http://localhost:7001/eureka
#下面的为集群版
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
2.1.2 配置启动类
注意注解:
@EnableEurekaClient 表示将其入住EurekaServer集群
package cn.kitey.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient //表明自己入住Eureka
public class PaymentMain8001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8001.class, args);
}
}
2.1.3 修改一下controller包中的控制类
添加信息:使用的什么端口让其显示,以便于后面的集群访问时进行分辨。
添加属性
Value("${server.port}") //读取配置文件中的端口信息
private String serverPort;
将属性输出:
return new CommonResult(result, "200", "插入数据成功!serverPort: " + serverPort);
return new CommonResult(200,"查询数据成功!serverPort: " + serverPort,paymentById);
全部代码为:
package cn.kitey.springcloud.controller;
import cn.kitey.springcloud.entities.CommonResult;
import cn.kitey.springcloud.entities.Payment;
import cn.kitey.springcloud.service.impl.PaymentServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@Slf4j //打印日志
public class PaymentController {
@Resource
private PaymentServiceImpl paymentService;
@Value("${server.port}") //读取配置文件中的端口信息
private String serverPort;
/**
* 数据的插入
* @param payment
* @return
*/
@PostMapping("/payment/create")
public CommonResult create(@RequestBody Payment payment){
int result = paymentService.create(payment);
log.info("******插入结果是" + result);
if(result > 0){
return new CommonResult(result, "200", "插入数据成功!serverPort: " + serverPort);
}else{
return new CommonResult(444,"插入数据失败!", null);
}
}
@GetMapping("/payment/get/{id}")
public CommonResult getPaymentById(@PathVariable("id") long id){
Payment paymentById = paymentService.getPaymentById( id);
log.info("*****查询数据的结果:" +paymentById);
if(paymentById !=null){
return new CommonResult(200,"查询数据成功!serverPort: " + serverPort,paymentById);
}else{
return new CommonResult(444,"查询数据失败,你查询的id:" + id,null);
}
}
}
2.2 模仿cloud-provider-payment-8001创建cloud-provider-payment-8002提供服务实现集群配置
2.2.1 配置application.yml文件
注意这里端口改为了8002
server:
port: 8002
spring:
application:
name: cloud-payment-service
datasource:
type: com.alibaba.druid.pool.DruidDataSource #当前数据源的操作类型
driver-class-name: com.mysql.jdbc.Driver #mysql驱动包
url: jdbc:mysql:///db2020?characterEncoding=utf8&serverTimezone=GMT%2B8
username: root
password: 25002500
jpa:
show-sql: true
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: cn.kitey.springcloud.entities #所有的Entity所在的包
eureka:
client:
register-with-eureka: true # 是否注册自己的信息到EurekaServer,默认是true
fetch-registry: true # 是否拉取其它服务的信息,默认是true
service-url: # EurekaServer的地址,现在是自己的地址,如果是集群,需要加上其它Server的地址。
# defaultZone: http://localhost:7001/eureka
#下面的为集群版
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
2.2.2 修改主启动类
注意注解:
@EnableEurekaClient
package cn.kitey.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient //表明自己入住Eureka
public class PaymentMain8002 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8002.class, args);
}
}
2.2.3 修改一下controller包中的控制类
修改方法跟cloud-provider-payment-8001 中的修改方法一样
3 将消费者注册进EurekaServer集群
前面讲述了cloud-consumer-order-80消费者的创建了 注意我这里我消费者端口为8
消费者创建过程
3.1 配置application.yml
注意这里的端口设置为:81
注册的为集群: defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
server:
port: 81
spring:
application:
name: cloud-order-service
eureka:
client:
# 是否从EurekaServer抓取自己已经有注册信息,集群必须设置为true才能配合ribbon使用
fetch-registry: true
#标识是否将自己注册进EurekaServer
register-with-eureka: true
service-url:
# defaultZone: http://localhost:7001/eureka
#下面的为集群版
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
3.2 修改主启动类
注意添加注解:
@EnableEurekaClient
package cn.kitey.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class OrderMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderMain80.class, args);
}
}
3.3 修改cloud-consumer-order-80中的controller包中的的控制类
修改访问的url为微服务名称:这个名称可以在http://eureka7002.com:7002/中进行查看,即EurekaServer集群注册中心
原来为:
private static final String PAYMENT_URL = "http://localhost:8001";
现在修改为
private static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";
3.4 修改cloud-consumer-order-80中的配置包下的配置类
添加注解:
@LoadBalanced: 添加后才可以访问微服务名称,并且实现负载均衡
package cn.kitey.springcloud.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced //使负载均衡,这样才可以访问"http://CLOUD-PAYMENT-SERVICE" 微服务名称
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
4 进行测试
启动五个module
注意:
先启动7001, 7002 注册中心
在启动服务:8001, 8002
然后启动80
访问:
http://eureka7002.com:7002/
两个服务,一个消费注册成功!
访问
http://eureka7001.com:7001/ 也是同样的效果
然后通过:
http://localhost:81/consumer/payment/get/4
进行数据查询,观察端口是否发生变化
第一次为:8001
第二次为:8002
端口会进行变化,说明服务端的集群配置成功
下一篇: 因为你不是东西