在搭建spring cloud eureka環(huán)境前先要了解整個(gè)架構(gòu)的組成,常用的基礎(chǔ)模式如下圖:
服務(wù)提供者:將springboot服務(wù)編寫好以后,通過配置注冊中心地址方式注冊,提供給消費(fèi)者使用。
注冊中心:服務(wù)的中間橋梁,服務(wù)提供者將服務(wù)注冊。服務(wù)消費(fèi)者可以通過注冊信息調(diào)用需要使用的服務(wù)。
服務(wù)消費(fèi)者:通過規(guī)定的調(diào)用方式,讀取注冊中心的注冊信息,調(diào)用相應(yīng)的服務(wù)。
根據(jù)后續(xù)的服務(wù)復(fù)雜度進(jìn)化以后,可以看到服務(wù)提供者也可以是服務(wù)消費(fèi)者,服務(wù)消費(fèi)者也可以是服務(wù)提供者。根據(jù)不同的業(yè)務(wù)情況是可以互相調(diào)用的。
下面來搭建一個(gè)基礎(chǔ)的eureka。環(huán)境還是使用的之前的spring官方下載的。
內(nèi)容寫的比較詳細(xì),可以跟這一步步操作。
一、注冊中心
以下是幾個(gè)需要修改和添加的地方,后面會(huì)有完整的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 服務(wù)端包 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-server</artifactid> </dependency> <!-- 監(jiān)控管理 --> <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 服務(wù)端包 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-server</artifactid> </dependency> <!-- 監(jiān)控管理 --> <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 # 單點(diǎn)的時(shí)候設(shè)置為 false 禁止注冊自身 fetchregistry: false serviceurl: defaultzone: http: //localhost:3000/eureka server: enableselfpreservation: false evictionintervaltimerinms: 4000 |
啟動(dòng)服務(wù)
瀏覽器輸入 http://127.0.0.1:3000
證明注冊中心搭建成功了
二、服務(wù)提供者
前面的步驟一樣
providercontroller是新建的一個(gè)服務(wù)代碼
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> |
不同的地方有加了一個(gè)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 ## 應(yīng)用程序名稱,后面會(huì)在消費(fèi)者中用到 |
http://127.0.0.1:3001/hello
http://127.0.0.1:3000/
證明服務(wù)已經(jīng)注冊成功
三、服務(wù)消費(fèi)者
前面還是同上
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新增以上內(nèi)容
完整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 注解,用負(fù)載均衡策略請求服務(wù)提供者 * 這是 spring ribbon 的提供的能力 * @return */ @loadbalanced @bean public resttemplate resttemplate() { return new resttemplate(); //用于調(diào)用服務(wù)對象 } 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" ; //服務(wù)注冊名 @requestmapping (value = "commonrequest" ) public object commonrequest(){ string url = "http://" + applicationname + "/hello" ; string s = resttemplate.getforobject(url,string. class ); //ribbon方式調(diào)用服務(wù) 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 |
啟動(dòng)服務(wù)
http://127.0.0.1:3002/commonrequest
返回服務(wù)提供者的 hello方法參數(shù)。
整個(gè)最簡單的過程就完成了,需要更好的使用spring cloud 后續(xù)需要了解分布式、負(fù)載均衡、熔斷等概念。在后續(xù)章節(jié)將一步步的拆分。
到此這篇關(guān)于spring cloud eureka 注冊與發(fā)現(xiàn)操作步驟詳解的文章就介紹到這了,更多相關(guān)spring cloud eureka 注冊內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://blog.csdn.net/terry711/article/details/111519711