服務治理可以說是微服務架構中最為核心和基礎的模塊,它主要用來實現各個微服務實例的自動化注冊和發現。
spring cloud eureka是spring cloud netflix 微服務套件的一部分,主要負責完成微服務架構中的服務治理功能。
本文通過簡單的小例子來分享下如何通過eureka進行服務治理:
- 搭建服務注冊中心
- 注冊服務提供者
- 服務發現和消費
==========我是華麗的分割線========================
一、搭建服務注冊中心
先列出完整目錄結構:
搭建過程如下:
1.創建maven工程:eureka(具體實現略)
2.修改pom文件,引入依賴
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
|
<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.sam</groupid> <artifactid>eureka</artifactid> <version> 0.0 . 1 -snapshot</version> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version> 1.5 . 1 .release</version> </parent> <properties> <javaversion> 1.8 </javaversion> </properties> <!-- 使用dependencymanagement進行版本管理 --> <dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-dependencies</artifactid> <version>camden.sr6</version> <type>pom</type> <scope> import </scope> </dependency> </dependencies> </dependencymanagement> <dependencies> <!-- 引入eureka server依賴 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-eureka-server</artifactid> </dependency> </dependencies> </project> |
3.創建啟動類
1
2
3
4
5
6
7
8
9
10
11
12
13
|
/** * * @enableeurekaserver * 用來指定該項目為eureka的服務注冊中心 */ @enableeurekaserver @springbootapplication public class eurekaapp { public static void main(string[] args) { springapplication.run(eurekaapp. class , args); } } |
4.配置application.properties文件
1
2
3
4
5
6
7
8
9
10
11
12
|
#設置tomcat服務端口號 server.port= 1111 #設置服務名稱 spring.application.name=eureka-service eureka.instance.hostname=localhost #注冊中心不需要注冊自己 eureka.client.register-with-eureka= false #注冊中心不需要去發現服務 eureka.client.fetch-registry= false #設置服務注冊中心的url eureka.client.serviceurl.defaultzone=http: //${eureka.instance.hostname}:${server.port}/eureka |
5.啟動服務并訪問,我們會看到這樣的畫面:
二、注冊服務提供者
先列出完整目錄結構:
搭建過程如下:
1.創建maven工程:hello-service(具體實現略)
2.修改pom文件,引入依賴
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
|
<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.sam</groupid> <artifactid>hello-service</artifactid> <version> 0.0 . 1 -snapshot</version> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version> 1.5 . 1 .release</version> </parent> <properties> <javaversion> 1.8 </javaversion> </properties> <dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-dependencies</artifactid> <version>camden.sr6</version> <type>pom</type> <scope> import </scope> </dependency> </dependencies> </dependencymanagement> <dependencies> <!-- 引入eureka 客戶端依賴 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-eureka</artifactid> </dependency> </dependencies> </project> |
3.創建啟動類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/*** * * @enablediscoveryclient * 讓服務使用eureka服務器 * 實現服務注冊和發現 * */ @enablediscoveryclient @springbootapplication public class helloapp { public static void main(string[] args) { springapplication.run(helloapp. class , args); } } |
4.創建controller
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@restcontroller public class hellocontroller { logger logger = loggerfactory.getlogger(hellocontroller. class ); @autowired discoveryclient discoveryclient; @requestmapping ( "/hello" ) public string hello() { serviceinstance instance = discoveryclient.getlocalserviceinstance(); //打印服務的服務id logger.info( "*********" + instance.getserviceid()); return "hello,this is hello-service" ; } } |
5.配置application.properties文件
1
2
3
4
5
|
server.port= 9090 #設置服務名 spring.application.name=hello-service #設置服務注冊中心的url,本服務要向該服務注冊中心注冊自己 eureka.client.serviceurl.defaultzone=http: //localhost:1111/eureka |
6.啟動并測試
1.)啟動后再hello-service的控制臺會有這種字樣(xxx代表你的pc名)
eureka的控制臺會打印出如下字樣(xxx代表你的pc名)
2.)再次訪問localhost:1111,會發現有服務注冊到注冊中心了
三、服務發現和消費
完整目錄結構如下:
搭建過程:
1.創建maven工程(具體實現略)
2.修改pom文件,引入依賴
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
|
<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.sam</groupid> <artifactid>hello-consumer</artifactid> <version> 0.0 . 1 -snapshot</version> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version> 1.5 . 1 .release</version> </parent> <properties> <javaversion> 1.8 </javaversion> </properties> <dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-dependencies</artifactid> <version>camden.sr6</version> <type>pom</type> <scope> import </scope> </dependency> </dependencies> </dependencymanagement> <dependencies> <!-- 引入eureka 客戶端依賴 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-eureka</artifactid> </dependency> <!-- 引入ribbon 依賴 ,用來實現負載均衡,我們這里只是使用,先不作其他介紹--> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-ribbon</artifactid> </dependency> </dependencies> </project> |
這里比hello-service服務提供者,多了ribbon的依賴
3.創建啟動類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@enablediscoveryclient @springbootapplication public class consumerapp { //@bean 應用在方法上,用來將方法返回值設為為bean @bean @loadbalanced //@loadbalanced實現負載均衡 public resttemplate resttemplate() { return new resttemplate(); } public static void main(string[] args) { springapplication.run(consumerapp. class , args); } } |
這里也要用到@enablediscoveryclient, 讓服務使用eureka服務器, 實現服務注冊和發現
4.創建controller
1
2
3
4
5
6
7
8
9
10
11
12
|
@restcontroller public class consumercontroller { //這里注入的resttemplate就是在com.sam.consumerapp中通過@bean配置的實例 @autowired resttemplate resttemplate; @requestmapping ( "/hello-consumer" ) public string helloconsumer() { //調用hello-service服務,注意這里用的是服務名,而不是具體的ip+port resttemplate.getforobject( "http://hello-service/hello" , string. class ); return "hello consumer finish !!!" ; } } |
5.配置application.properties文件
1
2
3
4
|
server.port= 9999 spring.application.name=hello-consumer eureka.client.serviceurl.defaultzone=http: //localhost:1111/eureka #這里的配置項目和服務提供者hello-service一樣 |
6.啟動,測試1.)啟動eureka。為了展示負責均衡的效果,我們的hello-service啟動兩個服務,啟動兩個服務的具體步驟如下
以上是hello-service1的啟動步驟,端口號為9090;同樣方法設置hello-service2,端口號為9091(具體實現略)。
2.)啟動hello-consumer
3.)再次訪問http://localhost:1111/,會發現有2個hello-service服務(端口號一個是9090,一個是9091),1個hello-consume服務
4.) 多次訪問http://localhost:9999/hello-consumer,會發現hello-service1和hello-service2會輪流被調用(已經實現了負責均衡),可以通過兩者的控制臺打印內容確認(還記得我們在hello-service的controller中有個loggerlogger.info("*********" + instance.getserviceid());嗎?對,就是這個打印)
四、總結
以上實例實現了基本的服務治理:
- 通過spring-cloud-starter-eureka-server和@enableeurekaserver實現服務注冊中心
- 通過spring-cloud-starter-eureka和@enablediscoveryclient使用并注冊到服務注冊中心
- 通過spring-cloud-starter-eureka和@enablediscoveryclient使用注冊中心并發現服務,通過spring-cloud-starter-ribbon來實現負載均衡消費服務
ps:這里說明下,我用的ide是spring tool suite,是spring定制版的eclipse,方便我們使用spring進行開發,有興趣的朋友可以自行百度了解下。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://www.cnblogs.com/sam-uncle/p/8954401.html