概述
用一個(gè)簡(jiǎn)單的例子演示spring cloud中eureka和ribbon的基本用法。
版本和環(huán)境
- idea
- spring boot 1.5.·0
- jdk 1.8
- maven 3
構(gòu)建eureka server
在spring cloud,可以使用eureka來(lái)管理微服務(wù),微服務(wù)可以注冊(cè)到eureka中。
首先可以用idea的spring initialzr
來(lái)創(chuàng)建eureka server注冊(cè)中心。
修改application.properties文件,添加如下內(nèi)容
1
2
3
4
5
|
spring.application.name=eureka-server eureka.instance.hostname=localhost eureka.client.register-with-eureka= false eureka.client.fetch-registry= false server.port= 8881 |
在spring boot為我們生成的啟動(dòng)類serverapplication
中加入@enableeurekaserver
注解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package com.springcloud.eureka; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.cloud.netflix.eureka.server.enableeurekaserver; @enableeurekaserver @springbootapplication public class serverapplication { public static void main(string[] args) { springapplication.run(serverapplication. class , args); } } |
在瀏覽器中輸入http://localhost:8881/
可以看到如下界面:
可以看到暫時(shí)還沒(méi)有服務(wù)注冊(cè)上來(lái)。到此,一個(gè)簡(jiǎn)單的微服務(wù)注冊(cè)中心就構(gòu)建完了。
編寫(xiě)微服務(wù)userservice
接下來(lái)用rest構(gòu)建一個(gè)微服務(wù)接口,并注冊(cè)到注冊(cè)中心上去。依然使用spring initialzr
來(lái)構(gòu)建一個(gè)新的工程。使用方式跟上面的一樣。
注意這次要勾選eureka discovery
組件。而不是eureka server
。
修改application.properties文件,添加如下內(nèi)容:
1
2
3
|
spring.application.name=user server.port= 8882 eureka.client.service-url.defaultzone=http: //localhost:8881/eureka/ |
在spring boot
為我們生成的userapplication
類中使用@enablediscoveryclient
注解。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package com.springcloud; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.cloud.client.discovery.enablediscoveryclient; @enablediscoveryclient @springbootapplication public class userapplication { public static void main(string[] args) { springapplication.run(userapplication. class , args); } } |
創(chuàng)建一個(gè)rest full的微服務(wù)接口。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package com.springcloud; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.restcontroller; @restcontroller public class usercontroller { @getmapping ( "/getuser" ) public string getuser() { return "i am user list." ; } } |
運(yùn)行userapplication后,再次訪問(wèn)http://localhost:8881/
會(huì)發(fā)現(xiàn)user這個(gè)服務(wù)已經(jīng)注冊(cè)上來(lái)了。
編寫(xiě)微服務(wù)order
接下來(lái),我們?cè)贅?gòu)建一個(gè)訂單的微服務(wù),并訪問(wèn)user這個(gè)微服務(wù)中的接口。
依然使用spring initialzr
來(lái)構(gòu)建一個(gè)新工程。user這個(gè)微服務(wù)是可以部署到多臺(tái)機(jī)器上的。客戶端在訪問(wèn)這個(gè)服務(wù)的時(shí)候,請(qǐng)求可以路由到任何一臺(tái)部署了user服務(wù)的機(jī)器。因此客戶端需要使用一個(gè)路由算法來(lái)調(diào)度user這個(gè)服務(wù)。在spring cloud中,可以使用ribbon組件來(lái)做客戶端路由。ribbon內(nèi)部會(huì)去服務(wù)注冊(cè)中心獲取服務(wù)列表的,以便調(diào)用對(duì)應(yīng)的服務(wù)。
這次除了勾選eureka discovery
組件。還需要勾選ribbon
。
修改application.properties文件,添加如下內(nèi)容:
1
2
3
|
spring.application.name=order server.port= 8883 eureka.client.service-url.defaultzone=http: //localhost:8881/eureka/ |
在spring boot
為我們生成的orderapplication
類中增加如下配置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package com.springboot; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.cloud.client.discovery.enablediscoveryclient; import org.springframework.cloud.client.loadbalancer.loadbalanced; import org.springframework.context.annotation.bean; import org.springframework.web.client.resttemplate; @enablediscoveryclient @springbootapplication public class orderapplication { @bean @loadbalanced resttemplate resttemplate() { return new resttemplate(); } public static void main(string[] args) { springapplication.run(orderapplication. class , args); } } |
由于使用了ribbon,這里需要使用@loadbalanced
注解。
編寫(xiě)ordercontroller
。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package com.springboot; import org.springframework.beans.factory.annotation.autowired; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.restcontroller; import org.springframework.web.client.resttemplate; @restcontroller public class ordercontroller { @autowired private resttemplate resttemplate; @getmapping ( "/getorderuser" ) public string getorderuser() { return resttemplate.getforentity( "http://user/getuser" ,string. class ).getbody(); } } |
運(yùn)行orderapplication
后,訪問(wèn)http://localhost:8881/
會(huì)發(fā)現(xiàn)order這個(gè)服務(wù)也被注冊(cè)到注冊(cè)中心了。
接下來(lái)我們?cè)L問(wèn)ordercontroller
中的getorderuser
方法,觸發(fā)調(diào)用usercontroller
的getuser
方法。
在瀏覽器中輸入:http://localhost:8883/getorderuser
可以看到返回了:i am user list.
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:http://blog.csdn.net/linsongbin1/article/details/79361268