本以介绍如何使用Alibaba Cloud Toolkit部署应用至SAE,以及对应用进行监控。
步骤二:创建服务提供者
在本地创建服务提供者应用工程,添加依赖,开启服务注册与发现功能,并将注册中心指定为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地址。
- 验证结果。
- 执行
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地址。
- 验证结果。
- 执行
nacos-service-consumer
中ConsumerApplication
的main
函数,启动应用。
- 登录本地启动的Nacos Server控制台
http://127.0.0.1:8848/nacos
(本地Nacos控制台的默认用户名和密码同为nacos)。
- 在左侧导航栏中选择 。
可以看到服务列表中已经包含了service-consumer,且在详情中可以查询该服务的详情。
步骤五:本地测试
在本地测试消费者对提供者的服务调用结果。
本示例以Windows系统为例。
表示本地开发的微服务 Provider 和 Consumer 调用正常。
步骤六:部署应用至 SAE
应用程序完成开发后,您需要在 Cloud Toolkit 中配置部署任务信息,将您的业务代码发布至步骤2所创建的应用。
- 配置 Cloud Toolkit 账户。
- 单击 Cloud Toolkit 图标,在下拉列表中单击 Preference…,在设置页面左侧导航栏选择 。
- 在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 EDAS Serverless。
- 在Deploy to EDAS Serverless运行配置页面,配置应用部署参数。配置完成后单击Apply保存设置。
- 部署应用。
单击
Run,运行Provider应用后,然后运行Consumer应用。
- 结果验证。
- 为Consumer应用绑定SLB。
- 访问Consumer。
- 对Consumer发起HTTP请求。
curl http://47.111.58.18/echo-feign/feign-rest
- 对Consumer发起HTTP请求,Consumer调用Provider。
curl http://47.111.58.18/echo-rest/rest-rest
- 在应用监控大盘查看调用数据。
问题反馈
如果您在使用SAE过程中有任何疑问,欢迎您扫描下面的二维码加入钉钉群进行反馈。
评论