前面第二章提到了eureka的单机模式,为了保证高可用,这章来测试eureka的集群部署,并且还是单机注册用户服务和订单服务。
eureka集群部署
- ApplicationEurekaCluster.java启动类
@SpringBootApplication
@EnableEurekaServer // 开启注册中心
public class ApplicationEurekaCluster {
public static void main(String[] args) {
SpringApplication.run(ApplicationEurekaCluster.class, args);
}
}
- application.yml配置
############################################################
#
# eureka 集群的注册中心
# web访问端口号 约定:7001-7003
#
############################################################
server:
# 动态设置port,不传默认7001 假设传入7002,则就是7002
port: ${port:7001}
tomcat:
uri-encoding: UTF-8
############################################################
#
# 配置项目信息
#
############################################################
spring:
application:
name: springcloud-eureka-server-cluster
############################################################
#
# eureka配置信息
#
############################################################
eureka:
instance:
# 集群中每个eureka的名字都是唯一的
hostname: eureka-cluster-${server.port}
# 自定义端口参数
other-node-port2: ${p2:7002}
other-node-port3: ${p3:7003}
client:
# 是否要把当前的eureka server注册到自己
register-with-eureka: false
# 从注册中心获得检索服务实例,server没有必要,直接false即可
# 自己就是注册中心,所以没必要去获得其他服务的实例,然后去调用
fetch-registry: false
# 单实例配置自己的服务地址,高可用集群则配置多个地址
service-url:
defaultZone: http://eureka-cluster-${eureka.other-node-port2}:${eureka.other-node-port2}/eureka/,http://eureka-cluster-${eureka.other-node-port3}:${eureka.other-node-port3}/eureka/
由于eureka工程只有1个,但是集群部署的话需要多个节点,例如3个。但是,我不可能在springboot工程中又额外去新增2个一模一样的eureka工程。这时候就需要在application.yml配置文件中设置动态参数,保证启动服务的时候,根据传入的端口号来决定是启动的哪个eureka节点。
- 配置host
- idea启动多个服务
拿eureka节点端口号为7002举例,idea–>Run–>Edit Configurations
参数前面加上-D,这样服务启动的时候配置文件能够读取到这个参数。 - 当3个服务都启动完成后,分别访问http://eureka-cluster-7001:7001/、http://eureka-cluster-7002:7002/、http://eureka-cluster-7003:7003/
用户服务注册到eureka集群
只需要修改application.yml配置中的defaultZone,改为eureka集群地址。
############################################################
#
# 用户微服务
# web访问端口号 约定:8001
#
############################################################
server:
port: 8001
tomcat:
uri-encoding: UTF-8
############################################################
#
# 配置项目信息
#
############################################################
spring:
application:
name: user
############################################################
#
# eureka配置信息
#
############################################################
eureka:
server:
hostname: localhost
port: 7000
client:
# 所有的微服务都必须注册到eureka中
register-with-eureka: true
# 从注册中心获得检索服务实例,用户服务需要配置为true
# 用户服务要去获得其他服务的实例,然后去调用
fetch-registry: true
# 注册中心的服务地址
service-url:
# defaultZone: http://${eureka.server.hostname}:${eureka.server.port}/eureka/
# 用户服务注册到eureka集群中
defaultZone: http://eureka-cluster-7001:7001/eureka/,http://eureka-cluster-7002:7002/eureka/,http://eureka-cluster-7003:7003/eureka/
订单服务注册到eureka集群
只需要修改application.yml配置中的defaultZone,改为eureka集群地址。
############################################################
#
# 订单微服务
# web访问端口号 约定:8002
#
############################################################
server:
port: 8002
tomcat:
uri-encoding: UTF-8
############################################################
#
# 配置项目信息
#
############################################################
spring:
application:
name: order
############################################################
#
# eureka配置信息
#
############################################################
eureka:
server:
hostname: localhost
port: 7000
client:
# 所有的微服务都必须注册到eureka中
register-with-eureka: true
# 从注册中心获得检索服务实例,用户服务需要配置为true
# 用户服务要去获得其他服务的实例,然后去调用
fetch-registry: true
# 注册中心的服务地址
service-url:
# defaultZone: http://${eureka.server.hostname}:${eureka.server.port}/eureka/
# 订单服务注册到eureka集群中
defaultZone: http://eureka-cluster-7001:7001/eureka/,http://eureka-cluster-7002:7002/eureka/,http://eureka-cluster-7003:7003/eureka/
测试
- 分别启动用户服务和订单服务,在eureka集群控制台查看效果。
- postman调用效果。