首先spring-cloud相關的簡介可以去百度搜索,這里就不多說了,這里分享一個翻譯spring cloud官網的中文網站spring cloud中文網
這個學習項目的代碼放在 https://github.com/fengzp/SpringCloudDemo
一、創建eureka服務注冊中心
1.1創建工程
我這里選的是spring-boot1.4.6的版本,因為暫時1.5.+的版本,spring-cloud會有一些bug
我這里的關於spring-cloud的學習都是在同一個項目下練習的。
最后根的pom文件如下
<?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.feng</groupId>
<artifactId>spring-cloud</artifactId>
<packaging>pom</packaging>
<version>0.0.1</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Camden.SR7</spring-cloud.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</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>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
新建模塊eureka-server
pom文件
<?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>spring-cloud</artifactId>
<groupId>com.feng</groupId>
<version>0.0.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>eureka-server</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
1.2
在resources下新建application.yml文件
server:
port: 8010 #服務端口
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false #是否將eureka自身作為應用注冊到eureka注冊中心
fetch-registry: false #為true時,可以啟動,但報異常:Cannot execute request on any known server
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
1.3
ServerApplication,使用@EnableEurekaServe標識這是一個eureka中心
package com.feng;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* @author fengzp
* @date 17/4/27
* @email fengzp@gzyitop.com
* @company 廣州易站通計算機科技有限公司
*/
@SpringBootApplication
@EnableEurekaServer
public class ServerApplication {
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
}
}
運行成功后打開http://localhost:8010/
可以看到如下頁面說明啟動成功
二、新建服務提供者
2.1
新建模塊service-a
pom文件
<?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>spring-cloud</artifactId>
<groupId>com.feng</groupId>
<version>0.0.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>service-a</artifactId>
</project>
2.2
新建配置文件application.yml
這里說明一點,端口可以使用${PORT:${SERVER_PORT:0}}來隨機指定一個未使用的端口
spring:
application:
name: service-a
server:
port: 8810
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8010/eureka/ #eureka服務注冊地址
2.3
ServiceApplication:
使用@EnableDiscoveryClient來標識是一個eurekaclient
/**
* @author fengzp
* @date 17/4/27
* @email fengzp@gzyitop.com
* @company 廣州易站通計算機科技有限公司
*/
@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class ServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceApplication.class, args);
}
@Value("${spring.application.name}")
private String name;
@Value("${server.port}")
private String port;
@RequestMapping("/hi")
public String hi(@RequestParam String id){
return "hi, " + id + ", " + name + ":" + port;
}
}
2.4
運行后再次打開http://localhost:8010/可以看到服務已經注冊到中心