以下示例使用一个项目,开启3个eureka-server做为集群,扩展同理
3个端口分别为 7001、7002、7003
1. 新建一个SpringBoot项目,添加eureka-server依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
在启动类中添加 @EnableEurekaServer 注解开启 eureka-serve 功能
@SpringBootApplication
@EnableEurekaServer
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2. 在 resouces/application.yml 配置文件中进行集群配置
# eureka注册中心
# web访问端口号 此处设置为:7001-7003
server:
port: ${port:7001}
tomcat:
uri-encoding: UTF-8
# 配置项目信息
spring:
application:
name: spring-cloud-eureka-cluster
# eureka 配置信息
eureka:
instance:
hostname: eureka-cluster-${server.port}
other-node-port2: ${p2:7002}
other-node-port3: ${p3:7003}
client:
register-with-eureka: 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/
注:other-node-port2 为自定义的名称,不是 eureka 自带的,所以写的时候idea编辑器是没联想。
关键点1:server.port 使用传参方式定义端口,而非直接写死;
关键点2:other-node-port 其它节点的端口,也是使用传参方式定义端口的;
关键点3:eureka.instance.hostname 也是通过占位符形式读取上面定义的端口号 ${server.port}
关键点4:service-url.defaultZone 配置多个集群地址,是不包含当前 7001 的,应该写其它两个 7002、7003
这个地址 http://eureka-cluster-7001:7001 我配置了 hosts了,如下:
127.0.0.1 eureka-cluster-7001
127.0.0.1 eureka-cluster-7002
127.0.0.1 eureka-cluster-7002
配置完成后先启动项目
点击 Edit Configurations...
第一次启动 7001 的 name 应该默认是 Application,为了区分我修改成了 eureka-cluster-7001
选中eureka-cluster-7001,点击上面的复制按钮,然后将复制出来的那个 Name 修改成 eureka-cluster-7002
在 VM options 上填写启动参数 -DPORT=7002 -DP2=7001 -DP3=7003
重复上面操作,再复制一个,修改 Name 为 eureka-cluster-7003
在 VM options 上填写启动参数 -DPORT=7003 -DP2=7001 -DP3=7002
注意启动参数别写错了!
操作完成后点击 OK。
7001、7002、7003分别设置如下:
启动这三个服务,三个都能访问说明配置成功
http://eureka-cluster-7001:7001/