在前兩章已經給大家講解了ribbon負載均衡的規則 以及 如何搭建ribbon并調用服務,那么在這一章呢 將會給大家說一說如何在springcloud中去使用ribbon。在搭建之前 我們需要做一些準備工作。
1. 搭建eureka服務器:springcloud-ribbon-server(項目名稱)
2. 服務提供者:springcloud-ribbon-police(項目名稱)
3. 服務調用者:springcloud-ribbon-person(項目名稱)
搭建eureka服務器
配置 pom.xml,加入springcloud核心依賴、配置及eureka服務器依賴
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
|
<parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version> 1.5 . 13 .release</version> </parent> <dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-dependencies</artifactid> <version>dalston.sr5</version> <type>pom</type> <scope> import </scope> </dependency> </dependencies> </dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-config</artifactid> </dependency> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-eureka-server</artifactid> </dependency> </dependencies> |
配置 application.yml(紅色部分是必須要寫的,黑色部分不寫也能正常運行 但是建議寫上,在這里筆者將官網的代碼貼上)
1
2
3
4
5
6
7
8
9
10
|
server: port: 8761 eureka: instance: hostname: localhost client: registerwitheureka: false 禁止向eureka注冊服務,因為它自己本身就是服務器 fetchregistry: false 這里不需要抓取注冊表 serviceurl: defaultzone: http: //${eureka.instance.hostname}:${server.port}/eureka/ |
創建啟動類:application.java(將服務跑起來放著,稍后會用到)配置 pom.xml,加入springcloud核心依賴、配置及eureka服務依賴
1
2
3
4
5
6
7
8
|
@springbootapplication @enableeurekaserver public class application { public static void main(string[] args) { new springapplicationbuilder(application. class ).web( true ).run(args); } } |
服務提供者
配置 pom.xml,加入springcloud核心依賴、配置及eureka客戶端依賴
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
|
<parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version> 1.5 . 13 .release</version> </parent> <dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-dependencies</artifactid> <version>dalston.sr5</version> <type>pom</type> <scope> import </scope> </dependency> </dependencies> </dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-config</artifactid> </dependency> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-eureka</artifactid> </dependency> </dependencies> |
配置 application.yml(需要使用defaultzone向服務器注冊服務,否則就算該服務運行起來了,但沒有向服務器注冊服務,也是使用不了的)(name 這個名稱是顯示在服務列表中的名稱,養成好習慣,一定要起有意義的名稱)
1
2
3
4
5
6
7
|
spring: application: name: springcloud-ribbon-police eureka: client: serviceurl: defaultzone: http: //localhost:8761/eureka/ |
因為該服務是提供服務的,所以下面會建一個實體類及controller用來對外提供服務,創建實體類:police.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class police { private string id; // 警察編號,用來保存用戶輸入的參數 private string url; // 處理請求的服務器url private string message; // 提示信息 public string getid() { return id; } public void setid(string id) { this .id = id; } public string geturl() { return url; } public void seturl(string url) { this .url = url; } public string getmessage() { return message; } public void setmessage(string message) { this .message = message; } } |
創建對外提供服務的controller:policecontroller.java(@restcontroller注解中包含了@controller+@responsebody)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
@restcontroller public class policecontroller { @requestmapping (value= "/getpolice" , method=requestmethod.get, produces=mediatype.application_json_value) public police getpolice(httpservletrequest request){ police p = new police(); p.seturl(request.getrequesturl().tostring()); p.setmessage( "警察派出成功" ); return p; } @requestmapping (value= "/getpolicebyid/{id}" , method=requestmethod.get, produces=mediatype.application_json_value) public police getpolice(httpservletrequest request, @pathvariable ( "id" ) string id){ police p = new police(); p.setid(id); p.seturl(request.getrequesturl().tostring()); p.setmessage( "指定警察派出成功" ); return p; } } |
因為我們要測試負載均衡,所以這里的服務提供者需要開啟多個服務實例,下面我們用讀取手動輸入端口號的方法,啟動多個服務實例,筆者在這里啟動了兩個服務實例:8080、8081
1
2
3
4
5
6
7
8
9
10
|
@springbootapplication @enableeurekaclient public class policeapplication { public static void main(string[] args) { scanner scan = new scanner(system.in); string port = scan.nextline(); new springapplicationbuilder(policeapplication. class ).properties( "server.port=" +port).run(args); } } |
如下圖,出現了兩個服務實例,分別是:8080、8081,紅色的信息咱們先不管他,如果實在有看著不順眼的小伙伴,可以配置心跳(簡單的來說,就是配置服務器每隔多久檢查一次服務實例狀態,如果某個服務因為某些原因停掉 不能用了,那么就將該服務 從服務列表中移除掉)
服務調用者
配置 pom.xml,加入springcloud核心依賴、配置及eureka客戶端依賴、ribbon依賴
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
|
<parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version> 1.5 . 13 .release</version> </parent> <dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-dependencies</artifactid> <version>dalston.sr5</version> <type>pom</type> <scope> import </scope> </dependency> </dependencies> </dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-config</artifactid> </dependency> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-eureka</artifactid> </dependency> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-ribbon</artifactid> </dependency> </dependencies> |
配置 application.yml(這里也將該服務注冊到服務器,一定要進行注冊)
1
2
3
4
5
6
7
8
9
|
server: port: 9090 spring: application: name: springcloud-ribbon-person eureka: client: serviceurl: defaultzone: http: //localhost:8761/eureka/ |
創建調用服務controller:personcontroller.java
resttemplate 是由 spring web 模塊提供的工具類,與 springcloud 無關,是獨立存在的
因 springcloud 對 resttemplate 進行了一定的擴展,所以 resttemplate 具備了負載均衡的功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
@restcontroller @configuration public class personcontroller { @bean @loadbalanced public resttemplate getresttemplate(){ return new resttemplate(); } @requestmapping ( "/getpolice" ) public string getpolice(){ resttemplate rt = getresttemplate(); string result = rt.getforobject( "http://springcloud-ribbon-police/getpolice" , string. class ); return result; } @requestmapping ( "/getpolicebyid/{id}" ) public string getpolicebyid( @pathvariable ( "id" ) string id){ resttemplate rt = getresttemplate(); string result = rt.getforobject( "http://springcloud-ribbon-police/getpolicebyid/" +id, string. class ); return result; } } |
創建啟動類:personapplication.java
1
2
3
4
5
6
7
8
|
@springbootapplication @enableeurekaclient public class personapplication { public static void main(string[] args) { new springapplicationbuilder(personapplication. class ).web( true ).run(args); } } |
到目前為止,eureka服務器、服務提供者、服務調用者(負載均衡)就已經全寫好了,下面我們訪問接口,來試一下 服務到底能不能調通
我們分別調用:http://localhost:9090/getpolice、http://localhost:9090/getpolicebyid/100
總結
以上所述是小編給大家介紹的springcloud 中使用 ribbon的方法詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:https://www.cnblogs.com/lpxdbk/p/9815324.html