天天看點

SpringCloud搭建Eureka叢集

第一部分:搭建Eureka Server叢集

Step1:建立工程,引入依賴

依賴檔案pom.xml如下

SpringCloud搭建Eureka叢集
SpringCloud搭建Eureka叢集

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中配置多執行個體的啟動參數,如下所示:

SpringCloud搭建Eureka叢集

配置好了,依次啟動peer1和peer2

SpringCloud搭建Eureka叢集

 Step5:Eureka的注冊中心去驗證

SpringCloud搭建Eureka叢集

第二部分:搭建Eureka Client叢集

 Step1:建立工程,引入配置檔案

我測試時的pom.xml如下:

SpringCloud搭建Eureka叢集
SpringCloud搭建Eureka叢集
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:啟動多個執行個體

 因為這裡的多個執行個體,我們需要不同的端口,是以,我們還是采用前面的方法來啟動多個執行個體。

SpringCloud搭建Eureka叢集

啟動後,我們可以在Eureka的注冊中心中可以看到(Peer1和Peer2都可以看到)

SpringCloud搭建Eureka叢集

PS:這裡localhost:eureka-client這個是測試時殘留的,這裡沒有清除掉,可以不用管它。

到這裡,我們的服務注冊中心和服務提供者都寫好了。

第三部分:消費Eureka Client的消息

注意,這裡我們要引入新的依賴ribbon。

SpringCloud搭建Eureka叢集
SpringCloud搭建Eureka叢集
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注冊中心

SpringCloud搭建Eureka叢集

 Step6:驗證請求

SpringCloud搭建Eureka叢集

參考文檔:

《SpringCloud 微服務實踐》

 源碼:https://github.com/iprometheus/spring-cloud-eureka-test

上一篇: 小試RavenDB