eureka项目作为注册中心,是三个节点peer1,peer2,peer3组成一个集群,之后会将其打包成docker image ,并部署到docker swarm
1.EurekaServerClusterApplication
package com.sm.eurekaservercluster;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication@EnableEurekaServerpublic class EurekaServerClusterApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerClusterApplication.class, args); }}
2.application-dev.yml
eureka: server: # 关闭自我保护机制(生产环境不启用) enable-self-preservation: false # 每隔10s扫描服务列表,移除失效服务(生产环境不启用) eviction-interval-timer-in-ms: 10000
3.application-peer1.yml
spring: profiles: peer1eureka: instance: hostname: peer1 instance-id: ${eureka.instance.hostname}:${server.port} client: serviceUrl: defaultZone: http://peer2:8762/eureka/,http://peer3:8763/eureka/server: port: 8761
4.application-peer2.yml
spring: profiles: peer2eureka: instance: hostname: peer2 instance-id: ${eureka.instance.hostname}:${server.port} client: serviceUrl: defaultZone: http://peer1:8761/eureka/,http://peer3:8763/eureka/server: port: 8762
5.application-peer3.yml
spring: profiles: peer3eureka: instance: hostname: peer3 instance-id: ${eureka.instance.hostname}:${server.port} client: serviceUrl: defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/server: port: 8763
6.build.gradle
buildscript { ext { springBootVersion = '2.0.1.RELEASE' } repositories { maven { url "http://maven.aliyun.com/nexus/content/groups/public/" } mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") classpath 'com.bmuschko:gradle-docker-plugin:3.2.5' }}apply plugin: 'java'apply plugin: 'org.springframework.boot'apply plugin: 'io.spring.dependency-management'apply plugin: 'com.bmuschko.docker-remote-api'group = 'com.sm.microservice'version = '2.0.0-SNAPSHOT'sourceCompatibility = 1.8repositories { maven { url "http://maven.aliyun.com/nexus/content/groups/public/" } mavenCentral() maven { url "https://repo.spring.io/milestone" }}ext { springCloudVersion = 'Finchley.RC1'}dependencies { compile 'org.springframework.boot:spring-boot-starter-web' compile 'org.springframework.boot:spring-boot-starter-actuator' compile 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server' testCompile 'org.springframework.boot:spring-boot-starter-test'}dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" }}import com.bmuschko.gradle.docker.tasks.image.Dockerfileimport com.bmuschko.gradle.docker.tasks.image.DockerBuildImagetask createDockerfile(type: Dockerfile) { destFile = project.file('Dockerfile') from 'frekele/java:jdk8' volume '/tmp' addFile("build/libs/*.jar",'/app.jar') entryPoint('java','-Djava.security.egd=file:/dev/./urandom','-jar','/app.jar')}task buildImage(type: DockerBuildImage) { dependsOn createDockerfile inputDir = createDockerfile.destFile.parentFile tag = "sm/eureka:${version}"}
7.部署成功后效果