在搭建spring cloud eureka環境前先要了解整個架構的組成,常用的基礎模式如下圖:
服務提供者:將springboot服務編寫好以后,通過配置注冊中心地址方式注冊,提供給消費者使用。
注冊中心:服務的中間橋梁,服務提供者將服務注冊。服務消費者可以通過注冊信息調用需要使用的服務。
服務消費者:通過規定的調用方式,讀取注冊中心的注冊信息,調用相應的服務。
根據后續的服務復雜度進化以后,可以看到服務提供者也可以是服務消費者,服務消費者也可以是服務提供者。根據不同的業務情況是可以互相調用的。
下面來搭建一個基礎的eureka。環境還是使用的之前的spring官方下載的。
內容寫的比較詳細,可以跟這一步步操作。
一、注冊中心
以下是幾個需要修改和添加的地方,后面會有完整的pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
<parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version> 2.1 . 3 .release</version> <relativepath /> <!-- lookup parent from repository --> </parent> <dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-dependencies</artifactid> <version>finchley.sr2</version> <type>pom</type> <scope> import </scope> </dependency> </dependencies> </dependencymanagement> <!-- 最新版的 eureka 服務端包 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-server</artifactid> </dependency> <!-- 監控管理 --> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-actuator</artifactid> </dependency> |
spring cloud | spring boot |
---|---|
angel版本 | 兼容spring boot 1.2.x |
brixton版本 | 兼容spring boot 1.3.x,也兼容spring boot 1.4.x |
camden版本 | 兼容spring boot 1.4.x,也兼容spring boot 1.5.x |
dalston版本、edgware版本 | 兼容spring boot 1.5.x,不兼容spring boot 2.0.x |
finchley版本 | 兼容spring boot 2.0.x,不兼容spring boot 1.5.x |
greenwich版本 | 兼容spring boot 2.1.x |
這里采用finchley.sr2版本 springboot版本改成 2.1.3.release
完整的pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd" > <modelversion> 4.0 . 0 </modelversion> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version> 2.1 . 3 .release</version> <relativepath /> <!-- lookup parent from repository --> </parent> <groupid>com.example</groupid> <artifactid>eureka1</artifactid> <version> 0.0 . 1 -snapshot</version> <name>eureka1</name> <description>demo project for spring boot</description> <properties> <java.version> 1.8 </java.version> </properties> <dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-dependencies</artifactid> <version>finchley.sr2</version> <type>pom</type> <scope> import </scope> </dependency> </dependencies> </dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter</artifactid> </dependency> <!-- 最新版的 eureka 服務端包 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-server</artifactid> </dependency> <!-- 監控管理 --> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-actuator</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-test</artifactid> <scope>test</scope> <exclusions> <exclusion> <groupid>org.junit.vintage</groupid> <artifactid>junit-vintage-engine</artifactid> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> </plugins> </build> </project> |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package com.example.demo; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.cloud.netflix.eureka.server.enableeurekaserver; @enableeurekaserver @springbootapplication public class eureka1application { public static void main(string[] args) { springapplication.run(eureka1application. class , args); } } |
然后在代碼文件中添加@enableeurekaserver注解
修改application.yml文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
server: port: 3000 # 端口 eureka: instance: hostname: eureka-center appname: 注冊中心 client: registerwitheureka: false # 單點的時候設置為 false 禁止注冊自身 fetchregistry: false serviceurl: defaultzone: http: //localhost:3000/eureka server: enableselfpreservation: false evictionintervaltimerinms: 4000 |
啟動服務
瀏覽器輸入 http://127.0.0.1:3000
證明注冊中心搭建成功了
二、服務提供者
前面的步驟一樣
providercontroller是新建的一個服務代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<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> <!-- eureka 客戶端 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid> </dependency> |
不同的地方有加了一個spring-boot-starter-web和spring-cloud-starter-netflix-eureka-client客戶端
完整的pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd" > <modelversion> 4.0 . 0 </modelversion> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version> 2.1 . 3 .release</version> <relativepath /> <!-- lookup parent from repository --> </parent> <groupid>com.example</groupid> <artifactid>eurekaclient1</artifactid> <version> 0.0 . 1 -snapshot</version> <name>eurekaclient1</name> <description>demo project for spring boot</description> <properties> <java.version> 1.8 </java.version> </properties> <dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-dependencies</artifactid> <version>finchley.sr2</version> <type>pom</type> <scope> import </scope> </dependency> </dependencies> </dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter</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> <!-- eureka 客戶端 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid> </dependency> </dependencies> <build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> </plugins> </build> </project> |
eurekaclient1application
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package com.example.demo; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.cloud.netflix.eureka.enableeurekaclient; @enableeurekaclient @springbootapplication public class eurekaclient1application { public static void main(string[] args) { springapplication.run(eurekaclient1application. class , args); } } |
providercontroller
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package com.example.demo; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restcontroller; @restcontroller public class providercontroller { @requestmapping (value = "/hello" ) public string hello(){ return "hello spring cloud!" ; } @requestmapping (value = "/nice" ) public string nice(){ return "nice to meet you!" ; } } |
application.yml
1
2
3
4
5
6
7
8
9
10
11
12
|
server: port: 3001 eureka: instance: preferipaddress: true client: serviceurl: defaultzone: http: //localhost:3000/eureka ## 注冊到 eureka spring: application: name: single-provider ## 應用程序名稱,后面會在消費者中用到 |
http://127.0.0.1:3001/hello
http://127.0.0.1:3000/
證明服務已經注冊成功
三、服務消費者
前面還是同上
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<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> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-openfeign</artifactid> </dependency> <!-- eureka 客戶端 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid> </dependency> |
pom.xml新增以上內容
完整pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd" > <modelversion> 4.0 . 0 </modelversion> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version> 2.1 . 3 .release</version> <relativepath /> <!-- lookup parent from repository --> </parent> <groupid>com.example</groupid> <artifactid>eurekaclient1</artifactid> <version> 0.0 . 1 -snapshot</version> <name>eurekaclient1</name> <description>demo project for spring boot</description> <properties> <java.version> 1.8 </java.version> </properties> <dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-dependencies</artifactid> <version>finchley.sr2</version> <type>pom</type> <scope> import </scope> </dependency> </dependencies> </dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter</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> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-openfeign</artifactid> </dependency> <!-- eureka 客戶端 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid> </dependency> </dependencies> <build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> </plugins> </build> </project> |
eurekaclient2application
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
package com.example.demo; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.cloud.client.loadbalancer.loadbalanced; import org.springframework.cloud.netflix.eureka.enableeurekaclient; import org.springframework.cloud.openfeign.enablefeignclients; import org.springframework.context.annotation.bean; import org.springframework.web.client.resttemplate; @enableeurekaclient @enablefeignclients @springbootapplication public class eurekaclient2application { /** * 注入 resttemplate * 并用 @loadbalanced 注解,用負載均衡策略請求服務提供者 * 這是 spring ribbon 的提供的能力 * @return */ @loadbalanced @bean public resttemplate resttemplate() { return new resttemplate(); //用于調用服務對象 } public static void main(string[] args) { springapplication.run(eurekaclient2application. class , args); } } |
consumercontroller
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package com.example.demo; import org.springframework.beans.factory.annotation.autowired; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restcontroller; import org.springframework.web.client.resttemplate; @restcontroller public class consumercontroller { @autowired private resttemplate resttemplate; private static final string applicationname = "single-provider" ; //服務注冊名 @requestmapping (value = "commonrequest" ) public object commonrequest(){ string url = "http://" + applicationname + "/hello" ; string s = resttemplate.getforobject(url,string. class ); //ribbon方式調用服務 return s; } } |
application.yml
1
2
3
4
5
6
7
8
9
10
11
|
server: port: 3002 eureka: client: serviceurl: defaultzone: http: //127.0.0.1:3000/eureka ## 注冊到 eureka instance: preferipaddress: true spring: application: name: single-customer |
啟動服務
http://127.0.0.1:3002/commonrequest
返回服務提供者的 hello方法參數。
整個最簡單的過程就完成了,需要更好的使用spring cloud 后續需要了解分布式、負載均衡、熔斷等概念。在后續章節將一步步的拆分。
到此這篇關于spring cloud eureka 注冊與發現操作步驟詳解的文章就介紹到這了,更多相關spring cloud eureka 注冊內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/terry711/article/details/111519711