本文介紹如何使用Alibaba Cloud Toolkit部署應用至SAE,以及對應用進行監控。
前提條件
下載Maven并設置環境變量。
下載并安裝JDK 1.8或更高版本。
下載并安裝IntelliJ IDEA (2018.3或更高版本)。
說明由于JetBrains插件官方服務器設立在海外,如果因訪問緩慢導致無法下載安裝,請聯系SAE工程師獲取離線安裝包。更多信息,請參見聯系我們。
IntelliJ IDEA中已安裝Alibaba Cloud Toolkit插件。具體操作,請參見通過IntelliJ IDEA插件部署應用。
步驟一:在SAE創建Demo應用
SAE支持代碼包和鏡像方式部署應用。具體操作,請參見將Java應用部署到SAE 1.0。
本文以JAR包方式為例,在SAE分別創建Provider和Consumer應用。具體操作,請參見在SAE控制臺使用JAR文件部署微服務應用。
步驟二:創建服務提供者
在本地創建服務提供者應用工程,添加依賴,開啟服務注冊與發現功能,并將注冊中心指定為Nacos Server。
創建命名為
nacos-service-provider
的Maven工程。在
pom.xml
文件中添加依賴。以Spring Boot 2.1.4.RELEASE和Spring Cloud Greenwich.SR1為例,依賴如下:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
示例中使用的版本為Spring Cloud Greenwich ,對應Spring Cloud Alibaba版本為2.1.1.RELEASE。
如果使用Spring Cloud Finchley版本,對應Spring Cloud Alibaba版本為2.0.1.RELEASE。
如果使用Spring Cloud Edgware版本,對應Spring Cloud Alibaba版本為1.5.1.RELEASE。
說明Spring Cloud Edgware版本的生命周期已結束,不推薦使用這個版本開發應用。
在
src\main\java
下創建名為com.aliware.edas的Package 。在com.aliware.edas中創建服務提供者的啟動類
ProviderApplication
,并添加如下代碼。其中
@EnableDiscoveryClient
注解表明此應用需開啟服務注冊與發現功能。package com.aliware.edas; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); } }
在Package
com.aliware.edas
中創建EchoController
,指定URL mapping為{/echo/{String}}
,指定HTTP方法為GET,方法參數從URL路徑中獲得,回顯收到的參數。package com.aliware.edas; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class EchoController { @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET) public String echo(@PathVariable String string) { return string; } }
在
src\main\resources
路徑下創建文件application.properties,在application.properties中添加如下配置,并指定Nacos Server的訪問地址。spring.application.name=service-provider server.port=18081 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
其中
127.0.0.1
為Nacos Server的IP地址。如果您的Nacos Server部署在其他設備,則需要修改成對應的IP地址。說明如果您的服務注冊中心為自建服務注冊中心,請將
127.0.0.1
替換為您的自建服務注冊中心地址。驗證結果。
執行
nacos-service-provider
中ProviderApplication
的main
函數,啟動應用。登錄本地啟動的Nacos Server控制臺
http://127.0.0.1:8848/nacos
(本地Nacos控制臺的默認用戶名和密碼同為nacos)。在左側導航欄中選擇 。
可以看到服務列表中已經包含了service-provider,且在詳情中可以查詢該服務的詳情。
步驟三:創建服務消費者
本步驟介紹服務注冊的功能,以及Nacos服務發現與RestTemplate和FeignClient兩個客戶端如何配合使用。
創建命名為
nacos-service-consumer
的Maven工程。在
pom.xml
中添加依賴。<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </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> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
在
src\main\java
下創建名為com.aliware.edas的Package。在
com.aliware.edas
中配置RestTemplate和FeignClient。在Package
com.aliware.edas
中創建一個接口類EchoService
,添加@FeignClient
注解,并配置對應的HTTP URL地址及HTTP方法。package com.aliware.edas; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @FeignClient(name = "service-provider") public interface EchoService { @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET) String echo(@PathVariable("str") String str); }
在
com.aliware.edas
中創建啟動類ConsumerApplication
并添加相關配置。使用
@EnableDiscoveryClient
注解啟用服務注冊與發現。使用
@EnableFeignClients
注解激活FeignClient。添加
@LoadBalanced
注解將RestTemplate與服務發現集成。
package com.aliware.edas; 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.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class ConsumerApplication { @LoadBalanced @Bean public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } }
在
com.aliware.edas
中創建類TestController
以演示和驗證服務發現功能。package com.aliware.edas; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController public class TestController { @Autowired private RestTemplate restTemplate; @Autowired private EchoService echoService; @RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET) public String rest(@PathVariable String str) { return restTemplate.getForObject("http://service-provider/echo/" + str, String.class); } @RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET) public String feign(@PathVariable String str) { return echoService.echo(str); } }
在
src\main\resources
路徑下創建文件application.properties
,在application.properties
中添加如下配置,指定Nacos Server的地址。spring.application.name=service-consumer server.port=18082 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
其中
127.0.0.1
為Nacos Server的IP地址。如果您的Nacos Server部署在其他設備,則需要修改成對應的IP地址。說明如果您的服務注冊中心為自建服務注冊中心,請將
127.0.0.1:8848
替換為您的自建服務注冊中心地址。驗證結果。
執行
nacos-service-consumer
中ConsumerApplication
的main
函數,啟動應用。登錄本地啟動的Nacos Server控制臺
http://127.0.0.1:8848/nacos
(本地Nacos控制臺的默認用戶名和密碼同為nacos)。在左側導航欄中選擇 。
可以看到服務列表中已經包含了service-consumer,且在詳情中可以查詢該服務的詳情。
步驟四:本地測試
在本地測試消費者對提供者的服務調用結果。
Linux/Unix/macOS系統:運行以下命令。
curl http://127.0.0.1:18082/echo-rest/rest-rest curl http://127.0.0.1:18082/echo-feign/feign-rest
Windows系統:在瀏覽器中輸入http://127.0.0.1:18082/echo-rest/rest-rest和http://127.0.0.1:18082/echo-feign/feign-rest。
本示例以Windows系統為例。
表示本地開發的微服務Provider和Consumer調用正常。
步驟五:部署應用至SAE
應用程序完成開發后,您需要在Cloud Toolkit中配置部署任務信息,將您的業務代碼發布至步驟一:在SAE創建Demo應用所創建的應用。
配置Cloud Toolkit賬戶。
單擊Cloud Toolkit圖標,在下拉列表中單擊 Preferensce…,在設置頁面左側導航欄選擇 。
在Accounts界面中設置Access Key ID和Access Key Secret,并單擊OK。
說明Access Key ID和Access Key Secret獲取方法:
在Accounts界面中單擊Get existing AK/SK,進入并登錄阿里云登錄頁面,系統自動跳轉至安全信息管理頁面,獲取Access Key ID和Access Key Secret。
配置部署任務。
在IntelliJ IDEA上單擊Cloud Toolkit 圖標,并在下拉列表中選擇Deploy to SAE。
在Deploy to SAE運行配置頁面,配置應用部署參數。配置完成后單擊Apply保存設置。
說明如果您使用自建服務注冊中心,您還需要在Advanced頁簽中配置啟動命令
-Dnacos.use.endpoint.parsing.rule=false
和-Dnacos.use.cloud.namespace.parsing=false
。Provider 應用配置
配置應用部署的區域、命名空間和步驟一:在SAE創建Demo應用中創建的應用。
Consumer應用配置
配置應用部署的區域、命名空間和創建的應用。
部署應用。
單擊Run,運行Provider應用后,然后運行Consumer應用。
結果驗證。
為Consumer應用綁定SLB。
具體操作,請參見為應用綁定CLB。
訪問Consumer。
對Consumer發起HTTP請求。
curl http://47.111.XX.XX/echo-feign/feign-rest
對Consumer發起HTTP請求,Consumer調用Provider。
curl http://47.111.XX.XX/echo-rest/rest-rest
在應用監控大盤查看調用數據。
在Consumer應用的應用監控中查看應用調用信息。