第一部分:搭建Eureka Server叢集
Step1:建立工程,引入依賴
依賴檔案pom.xml如下

1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4 <modelVersion>4.0.0</modelVersion>
5
6 <groupId>com.fangxing.springcloud</groupId>
7 <artifactId>euruka-server</artifactId>
8 <version>0.0.1-SNAPSHOT</version>
9 <packaging>jar</packaging>
10
11 <name>euruka-server</name>
12 <description>Demo project for Eureka Server</description>
13
14 <!--基于Springboot-->
15 <parent>
16 <groupId>org.springframework.boot</groupId>
17 <artifactId>spring-boot-starter-parent</artifactId>
18 <version>1.4.0.RELEASE</version>
19 <relativePath/>
20 </parent>
21
22 <properties>
23 <!--設定字元編碼及java版本-->
24 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
25 <java.version>1.8</java.version>
26 </properties>
27
28 <dependencies>
29 <!--增加eureka-server的依賴-->
30 <dependency>
31 <groupId>org.springframework.cloud</groupId>
32 <artifactId>spring-cloud-starter-eureka-server</artifactId>
33 </dependency>
34 <!--用于測試的,本例可省略-->
35 <dependency>
36 <groupId>org.springframework.boot</groupId>
37 <artifactId>spring-boot-starter-test</artifactId>
38 <scope>test</scope>
39 </dependency>
40 </dependencies>
41
42 <!--依賴管理,用于管理spring-cloud的依賴,其中Camden.SR3是版本号-->
43 <dependencyManagement>
44 <dependencies>
45 <dependency>
46 <groupId>org.springframework.cloud</groupId>
47 <artifactId>spring-cloud-dependencies</artifactId>
48 <version>Camden.SR3</version>
49 <type>pom</type>
50 <scope>import</scope>
51 </dependency>
52 </dependencies>
53 </dependencyManagement>
54
55 <build>
56 <plugins>
57 <plugin>
58 <groupId>org.springframework.boot</groupId>
59 <artifactId>spring-boot-maven-plugin</artifactId>
60 </plugin>
61 </plugins>
62 </build>
63
64
65 </project>
View Code
Step2:開啟Eureka的注冊中心
1 /**
2 * 開啟Eureka的注冊中心,隻需要添加這個注解即可
3 */
4 @EnableEurekaServer
5 @SpringBootApplication
6 public class EurukaServerApplication {
7
8 public static void main(String[] args) {
9 SpringApplication.run(EurukaServerApplication.class, args);
10 }
11 }
Step3:添加多執行個體的配置檔案
既然是叢集,1個執行個體就太寒碜了,是以我們通過配置檔案制定了多個執行個體。
application-peer1.properties檔案内容如下:
1 spring.application.name=eureka-server
2 server.port=1111
3
4 eureka.instance.hostname=peer1
5 eureka.client.serviceUrl.defaultZone=http://peer2:2222/eureka/
application-peer2.properties檔案内容如下:
1 spring.application.name=eureka-server
2 server.port=2222
3
4 eureka.instance.hostname=peer2
5 eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/
其中:eureka.client.serviceUrl.defaultZone指的是注冊中心的位址,是以兩個執行個體互相指向。
PS:這裡的peer1、peer2需要再host中配置一番,如下所示:
1 127.0.0.1 peer1
2 127.0.0.1 peer2
Step4:啟動注冊中心的多執行個體
再idea中配置多執行個體的啟動參數,如下所示:
配置好了,依次啟動peer1和peer2
Step5:Eureka的注冊中心去驗證
第二部分:搭建Eureka Client叢集
Step1:建立工程,引入配置檔案
我測試時的pom.xml如下:

1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4 <modelVersion>4.0.0</modelVersion>
5
6 <groupId>com.fangxing.springcloud</groupId>
7 <artifactId>euruka-client</artifactId>
8 <version>0.0.1-SNAPSHOT</version>
9 <packaging>jar</packaging>
10
11 <name>euruka-server</name>
12 <description>Demo project for Eureka Server</description>
13
14 <!--基于Springboot-->
15 <parent>
16 <groupId>org.springframework.boot</groupId>
17 <artifactId>spring-boot-starter-parent</artifactId>
18 <version>1.4.0.RELEASE</version>
19 <relativePath/>
20 </parent>
21
22 <properties>
23 <!--設定字元編碼及java版本-->
24 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
25 <java.version>1.8</java.version>
26 </properties>
27
28 <dependencies>
29 <!--增加eureka-server的依賴-->
30 <dependency>
31 <groupId>org.springframework.cloud</groupId>
32 <artifactId>spring-cloud-starter-eureka</artifactId>
33 </dependency>
34 <!--用于測試的,本例可省略-->
35 <dependency>
36 <groupId>org.springframework.boot</groupId>
37 <artifactId>spring-boot-starter-test</artifactId>
38 <scope>test</scope>
39 </dependency>
40 </dependencies>
41
42 <!--依賴管理,用于管理spring-cloud的依賴,其中Camden.SR3是版本号-->
43 <dependencyManagement>
44 <dependencies>
45 <dependency>
46 <groupId>org.springframework.cloud</groupId>
47 <artifactId>spring-cloud-dependencies</artifactId>
48 <version>Brixton.SR5</version>
49 <type>pom</type>
50 <scope>import</scope>
51 </dependency>
52 </dependencies>
53 </dependencyManagement>
54
55 <build>
56 <plugins>
57 <plugin>
58 <groupId>org.springframework.boot</groupId>
59 <artifactId>spring-boot-maven-plugin</artifactId>
60 </plugin>
61 </plugins>
62 </build>
63
64
65 </project>
Eureka Client的pom.xml
Step2:啟動發現服務
1 @EnableDiscoveryClient
2 @SpringBootApplication
3 public class EurekalclientApplication {
4
5 public static void main(String[] args) {
6 SpringApplication.run(EurekalclientApplication.class, args);
7 }
8 }
Step3:配置Client的應用
1 spring.application.name=eureka-client
2
3 eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2:2222/eureka/
提供一個測試的Controller。
1 @RestController
2 public class HelloController {
3
4 @Autowired
5 private DiscoveryClient client;
6
7 @RequestMapping(value = "/hello",method = RequestMethod.GET)
8 public String index(){
9 ServiceInstance instance=client.getLocalServiceInstance();
10 System.out.println("/hello,host:"+instance.getHost()+",service_id:"+instance.getServiceId());
11 return "hello world!";
12 }
13
14 }
Step4:啟動多個執行個體
因為這裡的多個執行個體,我們需要不同的端口,是以,我們還是采用前面的方法來啟動多個執行個體。
啟動後,我們可以在Eureka的注冊中心中可以看到(Peer1和Peer2都可以看到)
PS:這裡localhost:eureka-client這個是測試時殘留的,這裡沒有清除掉,可以不用管它。
到這裡,我們的服務注冊中心和服務提供者都寫好了。
第三部分:消費Eureka Client的消息
注意,這裡我們要引入新的依賴ribbon。

1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4 <modelVersion>4.0.0</modelVersion>
5
6 <groupId>com.fangxing.springcloud</groupId>
7 <artifactId>euruka-server</artifactId>
8 <version>0.0.1-SNAPSHOT</version>
9 <packaging>jar</packaging>
10
11 <name>euruka-server</name>
12 <description>Demo project for Eureka Server</description>
13
14 <!--基于Springboot-->
15 <parent>
16 <groupId>org.springframework.boot</groupId>
17 <artifactId>spring-boot-starter-parent</artifactId>
18 <version>1.4.0.RELEASE</version>
19 <relativePath/>
20 </parent>
21
22 <properties>
23 <!--設定字元編碼及java版本-->
24 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
25 <java.version>1.8</java.version>
26 </properties>
27
28 <dependencies>
29 <!--增加eureka-server的依賴-->
30 <dependency>
31 <groupId>org.springframework.cloud</groupId>
32 <artifactId>spring-cloud-starter-eureka</artifactId>
33 </dependency>
34 <!--增加ribbon的依賴-->
35 <dependency>
36 <groupId>org.springframework.cloud</groupId>
37 <artifactId>spring-cloud-starter-ribbon</artifactId>
38 </dependency>
39 <!--用于測試的,本例可省略-->
40 <dependency>
41 <groupId>org.springframework.boot</groupId>
42 <artifactId>spring-boot-starter-test</artifactId>
43 <scope>test</scope>
44 </dependency>
45 </dependencies>
46
47 <!--依賴管理,用于管理spring-cloud的依賴,其中Camden.SR3是版本号-->
48 <dependencyManagement>
49 <dependencies>
50 <dependency>
51 <groupId>org.springframework.cloud</groupId>
52 <artifactId>spring-cloud-dependencies</artifactId>
53 <version>Brixton.SR5</version>
54 <type>pom</type>
55 <scope>import</scope>
56 </dependency>
57 </dependencies>
58 </dependencyManagement>
59
60 <build>
61 <plugins>
62 <plugin>
63 <groupId>org.springframework.boot</groupId>
64 <artifactId>spring-boot-maven-plugin</artifactId>
65 </plugin>
66 </plugins>
67 </build>
68
69
70 </project>
Eureka消費者的pom.xml
Step2:啟用發現服務并開啟用戶端負載均衡
1 @EnableDiscoveryClient
2 @SpringBootApplication
3 public class RibbonConsumerApplication {
4
5 public static void main(String[] args) {
6 SpringApplication.run(RibbonConsumerApplication.class, args);
7 }
8
9 //開啟用戶端負載均衡
10 @Bean
11 @LoadBalanced
12 RestTemplate restTemplate(){
13 return new RestTemplate();
14 }
15 }
Step3:配置消費者(跟生産者類似)
1 spring.application.name=ribbon-consumer
2 server.port=9000
3
4 eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2:2222/eureka/
Step4:編寫消費者執行個體
1 @RestController
2 public class ConsumerController {
3
4 @Autowired
5 RestTemplate restTemplate;
6
7 @RequestMapping(value = "/ribbon-consumer",method = RequestMethod.GET)
8 public String helloConsumer(){
9 return restTemplate.getForEntity("http://eureka-client/hello",String.class).getBody();
10 }
11
12 }
Step5:驗證Eureka注冊中心
Step6:驗證請求
參考文檔:
《SpringCloud 微服務實踐》
源碼:https://github.com/iprometheus/spring-cloud-eureka-test