Spring Cloud 微服务架构概览
Spring Cloud 是一套用于构建微服务生态的解决方案,它基于Spring Boot提供了一套简单易用的工具集,帮助开发者快速地搭建分布式系统。通过将大型应用拆分为多个小型、独立的服务,每个服务都可以单独开发、部署和扩展,这不仅提高了系统的可用性和稳定性,还增强了团队成员间的协作效率。例如,在一个电商应用中,可以将订单处理、用户管理、库存检查等功能分别封装为不同的微服务,当需要调整某一部分逻辑时,只需修改对应的服务而无需停机整个系统。此外,Spring Cloud 支持多种服务调用方式如RestTemplate或OpenFeign等,使得不同服务之间能够高效且可靠地通信,从而让企业级应用程序更加灵活应对需求变化和技术挑战。
Spring Cloud Alibaba概览:阿里巴巴的微服务解决方案
Spring Cloud Alibaba 是 Spring Cloud 目前最佳的本地化实践,它结合了阿里在 Java 应用开发领域多年的实践经验,为业务的可持续发展提供持续的保障。Spring Cloud Alibaba 的主要组件包括:
- 服务发现与配置中心 - Nacos:用于服务注册、发现及配置管理。
- 分布式事务 - Seata:提供分布式事务解决方案。
- 限流降级 - Sentinel:实现流量控制、熔断降级等功能。
- 分布式消息 - RocketMQ:支持发布/订阅和点对点的消息传递模式。
- AI 集成 - Spring AI Alibaba:为应用集成AI功能提供支持。
- 同构服务调用 - Dubbo:提供高性能的RPC服务框架。
- 静态编译 - GraalVM:优化启动时间和资源消耗。
- 日志分析框架 - iLogtail:收集、过滤并发送日志数据到日志服务。
每个组件都经过了线上验证,并通过标准化接口简化了使用过程,助力开发者快速构建微服务应用。
Spring Cloud Alibaba实现服务调用的实战
spring cloud alibaba服务调用实践
为了实现一次基于 Nacos 和 Spring Cloud Alibaba 的远程服务调用,我们首先需要搭建两个项目:一个是服务提供者(service-provider
),另一个是服务消费者(service-consumer
)。接下来,我将详细介绍如何配置这两个项目以完成远程服务调用。
1. 服务提供者的配置与代码
POM依赖配置
在 service-provider
项目的 pom.xml
文件中添加如下依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
确保你已经添加了Spring Boot和Spring Cloud的相关BOM管理版本,例如:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Nacos配置
在 application.properties
或 application.yml
中配置Nacos相关信息:
spring:
application:
name: service-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
server:
port: 8081
启动类与控制器
创建一个Spring Boot应用,并定义一个简单的REST接口用于测试服务调用:
@SpringBootApplication
@EnableDiscoveryClient
public class ServiceProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceProviderApplication.class, args);
}
}
@RestController
@RequestMapping("/api")
class EchoController {
@GetMapping("/echo/{string}")
public String echo(@PathVariable String string) {
return "Hello, " + string;
}
}
2. 服务消费者的配置与代码
POM依赖配置
对于 service-consumer
项目,除了需要引入上述的 nacos-discovery
依赖外,还需加入OpenFeign或RestTemplate来发起HTTP请求。这里采用OpenFeign作为示例:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
Nacos配置
同样地,在消费者端也需要配置Nacos服务器地址以及应用程序名称等信息:
spring:
application:
name: service-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
server:
port: 8082
Feign客户端定义及使用
定义一个Feign客户端用来调用之前的服务:
@FeignClient("service-provider")
interface EchoService {
@GetMapping("/api/echo/{string}")
String echo(@PathVariable("string") String string);
}
然后在控制器里注入这个客户端并进行调用:
@SpringBootApplication
@EnableFeignClients
public class ServiceConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceConsumerApplication.class, args);
}
}
@RestController
class ConsumerController {
@Autowired
private EchoService echoService;
@GetMapping("/callEcho/{string}")
public String callEcho(@PathVariable String string) {
return echoService.echo(string);
}
}
通过以上步骤,我们就成功实现了基于Nacos注册中心的微服务间远程调用。当访问http://localhost:8082/callEcho/World
时,会得到由service-provider
提供的响应:“Hello, World”。这证明了整个流程正确无误。
Nacos 服务的安装与配置
Nacos server的安装和部署
Nacos 作为服务发现的核心组件,在使用 Spring Cloud Alibaba (sca) 的场景中扮演着重要角色。为了实现远程调用功能,我们需要首先将 Nacos 部署起来,并将其集成到微服务架构中。这里将以阿里云上的 MSE(微服务引擎)免费试用为例,详细介绍 Nacos 服务器的安装与部署步骤。
第一步:准备环境和资源
准备专有网络VPC和交换机
- 如果您已有 VPC 和交换机,并在该 VPC 内部署了微服务应用,则无需新建。请确保此 VPC 与后续创建的注册配置中心实例所选的 VPC 相同。
- 若需新建 VPC 和交换机,请参考创建和管理专有网络指南进行操作。
开通微服务引擎注册配置 MSE Nacos/ZooKeeper
- 访问阿里云免费试用页面。点击右上角的登录/注册按钮并按照提示完成账号登录、注册或实名认证。
- 登录后,在产品类别下选择 中间件 > 微服务引擎,找到 注册配置 MSE Nacos/ZooKeeper 卡片,点击立即试用。
- 在面板上按需求配置相关选项:
- 引擎类型:选择 Nacos。
- 实例名称:自定义一个易于识别的名字。
- 资源组:通常选择默认即可。
- 网络类型:
- 客户端位于 VPC 内时,选择 专有网络。
- 客户端位于公网时,选择 公网网络。
- 若两处都需要访问注册中心,同样选择 专有网络 并配置至少 1 Mbps 的公网带宽。
- 专有网络:选取客户端所在 VPC。
- 交换机:从所选 VPC 下拉列表中指定合适的交换机。
- 公网宽带:若通过公网访问,则设置不低于 1 Mbps 的带宽值。
- 同意服务协议后,点击立即试用提交申请。系统会自动开始创建实例,整个过程大约需要 3 至 5 分钟。之后可以通过 实例列表页 查看状态,确认实例运行正常。
第二步:微服务应用部署及注册
-
登录 MSE 控制台,在访问方式列查看 Nacos 实例的访问地址,格式如
mse.XX.nacos.mse.aliyuncs.com
。 -
将上述获取到的地址添加到您的微服务应用配置文件中。对于 Spring Cloud 应用,编辑
application.properties
或application.yml
文件,增加如下配置:spring: cloud: nacos: discovery: server-addr: mse.XX.nacos.mse.aliyuncs.com:8848
-
重启微服务应用使更改生效。
解释
以上步骤涵盖了从环境搭建到服务注册的全过程。首先,我们通过阿里云平台快速地启动了一个 Nacos 实例,然后通过简单的配置调整使得我们的微服务能够连接到这个 Nacos 服务发现中心。这样,各个微服务之间就可以利用 Nacos 提供的服务发现机制相互定位和通信了。