【Spring Cloud】實戰項目搭建


0、項目搭建

創建maven項目,刪除其中的src目錄,作為整體父項目,在其中添加module實現各個組件。

1、Eureka Server的實現

添加module,創建Spring Boot項目,添加Eureka Discovery ClientEureka Server依賴,作為Eureka Server。

啟動類添加@EnableEurekaServer注釋。

修改配置文件application.yml,如下:

 1 server:
 2     port: 1001
 3 
 4 eureka:
 5     client:
 6         //是否將自己注冊到eureka server上,默認為true
 7         //由於本節點為eureka server,設為false
 8         registerWithEureka: false
 9         //是否從eureka server獲取注冊信息,默認為true
10         //由於為單點的eureka server,不需要同步信息,設為false
11         fetchRegistry: false
12         //設置與eureka server交互的地址,查詢和注冊服務都經過這個地址
13         serviceUrl:
14             defaultZone: http://localhost:${server.port}/eureka/

啟動項目,即可訪問http://localhost:1001/查看eurekaServer管理中心。

2、Service節點

添加module,創建Spring Boot項目,添加Eureka Discovery ClientEureka Server依賴。

啟動類添加@EnableEurekaClient注釋(也可用@EnableDiscoveryClient取代,效果相同,前者對應Eureka,后者適用多種注冊中心)以及@ComponentScan注釋。

修改配置文件application.yml,如下:

 1 spring:
 2     //服務名稱
 3     application:
 4         name: Service112 
13 server:
14     port: 8001
15 
16 //在服務中心進行注冊
17 eureka:
18     client:
19         serviceUrl:
20             defaultZone: http://localhost:8801/eureka/

配置完成后啟動項目,可在eureka管理中心看到注冊的服務。

 

項目中新建service和controller包,controller包中HelloController負責接受請求,並路由到service包中的具體實現,controller中僅注入service對象,然后根據請求路徑調用響應的service實現,service中負責具體的實現。

 

同理,按上面步驟增加第二個Service節點,注冊名為Service2,注冊在8002端口。

3、服務調用

Sping  Cloud由兩種消費方式,rest+ribbon和feign兩種。

3.1、rest+ribbon調用(通過RestTemplate構造URL調用)

添加module,創建Spring Boot項目,添加Eureka Discovery ClientEureka ServerRibbon依賴。

啟動類添加@EnableDiscoveryClient和@ComponentScan注釋。

修改配置文件application.yml,注冊在8003端口上的Service3服務。

service包和controller包同上。

Service3調用Service1和Service2:

啟動類中注入RestTemplate對象,添加@LoadBalance、@Bean和@Autowired注釋,開啟負載均衡。

改造service包中的具體實現:

自動注入(@Autowired)RestTemplate對象,restTemplate.getForObject("http://${注冊應用名}/${請求路徑}?參數列表",String.class)

實現遠程調用,通過注冊應用名自動負載均衡。

3.2、feign調用(通過動態代理的接口來實現接口調用,在接口中實現遠程調用)

添加module,創建Spring Boot項目,添加Eureka Discovery ClientEureka ServerFeign依賴。

啟動類添加@EnableDiscoveryClient和@ComponentScan注釋。

修改配置文件application.yml,注冊在8004端口上的Service4服務。

service包和controller包同上。

Service4調用Service1和Service2:

新增feignRPC包,其中定義兩個接口,分別對應兩個應用Service1和Service2的調用。

service1_feign接口為:

1 @FeignClients(value = "Service1")    //通過應用注冊名來調用服務
2 public interface service1_feign() {
3     @RequestMapping(value = "/${請求路徑}", method = RequestMethod.GET)
4     public String getHello(@RequestParam("service1中參數名") 具體參數);
5 }

改造service包中的具體實現:

自動注入(@Autowired)service1_feign接口,像調用本地方法那樣調用接口的方法即可實現遠程調用

Feign集成了Ribbon,通過注冊應用名自動負載均衡。

4、體驗負載均衡機制

 創建module,普通的service節點,注冊在8005端口,應用名為Service1。

在eureka server管理界面可以看到Service1有兩個服務提供者提供同名應用。

通過Service3或者Service4調用應用名為Service1的服務。

由於Ribbon默認的負載均衡策略為輪詢,通過刷新界面,可以看到一次調用module1和module5提供的服務。

5、網關Zuul的搭建

5.1、體驗網關的請求轉發功能

創建module,添加Eureka Discovery Client、Eureka Server和Zuul依賴。

啟動類添加@EnableZuulProxy注釋。

修改配置文件application.yml,注冊在6001端口上,注冊應用名為zuul。

啟動項目后,可以通過網關訪問服務:

直接http://localhost:8001/hello?name=world可以訪問Service1;

通過網關轉發,http://localhost:6001/Service1/hello?name=world訪問Service1應用,Zuul默認實現了按應用名負載均衡。

5.2、網關的自定義路由

在application.yml配置文件中配置:

1 zuul:
2     //前綴,請求路徑前必須加
3     prefix: /api
4     //自定義路由
5     routes:
6         Service1: /service_1_zuul/**
7     //禁止直接訪問后台服務
8     ignored-services: Service1

啟動項目后,訪問http://localhost:8001/hello?name=world失敗,網關禁止直接調用后台服務Service1。

通過網關訪問http://localhost:6001/api/service_1_zuul/hello?name=world,可以輪詢調用Service1和Service5。

6、Eureka Server集群

7、熔斷降級功能


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM