1. 双机高可用是标配,解决单点故障问题。源码跟单机版一样。配置文件不同。运行方式要略有注意。为完整起见,贴出全部代码。
参考资料:http://blog.didispace.com/springcloud6/
2. 源码目录结构
.
├── eureka-server.log
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── brian
│ │ │ └── demo
│ │ │ └── eurekaserver
│ │ │ └── App.java
│ │ └── resources
│ │ ├── application-peer1.properties
│ │ ├── application-peer2.properties
3. pom.xml
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.didispace</groupId>
<artifactId>eureka-server</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>eureka-server</name>
<description>Spring Cloud In Action</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.7.RELEASE</version>
<relativePath />
</parent>
<repositories>
<repository>
<id>my-nexus-central</id>
<name>my local nexus</name>
<url>http://localhost:8081/nexus/content/repositories/central/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
</repository>
</repositories>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<!--<dependency> -->
<!--<groupId>org.springframework.boot</groupId> -->
<!--<artifactId>spring-boot-starter-actuator</artifactId> -->
<!--</dependency> -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Brixton.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
package com.brian.demo.eurekaserver;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class App{
public static void main(String[] args) {
new SpringApplicationBuilder(App.class).web(true).run(args);
}
}
4. application-peer1.properties
spring.application.name=eureka-server
server.port=1111
eureka.instance.hostname=peer1
eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka/
5.application-peer2.properties
spring.application.name=eureka-server
server.port=1112
eureka.instance.hostname=peer2
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/
7. 编译打包
mvn clean package
8. 运行
要将jar包放到不同的目录下运行。
8.1 java -jar ~/usr/eureka-server-1/eureka-server-1.0.0.jar --spring.profiles.active=peer1
此时会报错,因为第二个eureka server尚未运行,继续等待既可。
8.2 java -jar ~/usr/eureka-server-2/eureka-server-1.0.0.jar --spring.profiles.active=peer2
9. 查看
9.1 http://localhost:1111/
可以看到这里注册了1112这个端口的服务
9.2 http://localhost:1112/
可以看到这里注册了1111这个端口的服务
10. 如果一个服务要同时注册到这两个server上,配置application.properties文件内容如下:
spring.application.name=compute-service
server.port=2222
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2:1112/eureka/