一文看懂Spring全家桶之服务调用最佳实践

spring 全家桶的整体介绍

Spring 全家桶为开发者提供了一套全面的解决方案,涵盖了应用开发的各个方面。Spring Boot 通过简化配置使快速构建独立的、生产级别的基于 Spring 的应用成为可能。Spring MVC 支持创建灵活且强大的 Web 应用程序。Spring Cloud 则专注于微服务架构中的常见模式实现,如服务发现、配置管理等,促进云原生应用的发展。Spring Data 提供了一种一致的方式访问多种数据存储技术,降低了数据库操作的复杂度。最新的 Spring AI 则旨在将人工智能能力无缝集成到 Spring 生态系统中,使得构建智能应用变得更加简单。这些工具共同作用,帮助开发者高效地构建现代企业级应用。

spring 微服务 整体介绍

Spring Cloud 作为 Spring 家族中用于构建微服务架构的重要组件,提供了一套全面的解决方案来支持分布式系统的开发。微服务是一种将单一应用程序分解为一组小型、独立的服务的方法,这些服务可以独立部署和扩展。Spring Cloud 则通过一系列的工具和服务帮助开发者实现这一目标,它不仅关注于服务本身的构建,还包括服务间的通信、配置管理、负载均衡、熔断机制等。

在实际应用场景中,假设一个团队正在开发一款 Web 或移动应用,随着项目规模的增长及团队成员数量增加,传统单体架构逐渐暴露出维护困难、更新成本高等问题。采用基于 Spring Cloud 的微服务架构后,能够有效地解决这些问题。例如,对于一个电商系统来说,我们可以将其拆分为用户管理、商品展示、订单处理等多个微服务。每个服务专注于自己特定的功能领域,并且可以通过轻量级的通信协议(如 HTTP/REST 或 gRPC)与其他服务进行交互。这种方式提高了系统的灵活性与可维护性,同时也能更好地应对流量高峰带来的挑战。此外,利用 Spring Cloud 提供的服务发现机制,各个微服务能够自动注册到服务中心并被其他服务发现,极大地简化了服务之间的调用过程。

spring cloud alibaba介绍

Spring Cloud Alibaba 是 Spring Cloud 的本地化最佳实践,它结合了阿里巴巴在 Java 应用开发领域多年的实践经验,为业务的可持续发展提供了持续的保障。Spring Cloud Alibaba 包含的主要组件有:

  • Nacos:作为服务发现和配置中心,支持动态配置和服务注册与发现。
  • Sentinel:提供流量控制、熔断降级等功能,保证系统的稳定性。
  • Seata:实现分布式事务管理,确保数据的一致性。
  • RocketMQ:高性能的消息队列,用于解耦系统组件并处理消息削峰填谷。
  • Dubbo:RPC 服务框架,支持高效的远程服务调用。
  • SchedulerX:分布式任务调度平台,适用于定时任务管理和调度。
  • GraalVM:静态编译技术,提高应用性能和启动速度。
  • iLogtail:日志分析框架,帮助用户进行日志收集和分析。

spring cloud alibaba服务调用实践

spring cloud alibaba服务调用实践

为了实现一次远程服务调用,我们将使用Nacos作为服务注册与发现组件,并结合Spring Cloud Alibaba来构建微服务架构。这里将详细列出如何配置和编写代码来完成服务提供者(provider)和服务消费者(consumer)的搭建。这个例子中,我们会创建一个简单的RESTful API,然后通过Feign客户端进行调用。

1. 创建服务提供者

1.1 添加依赖

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>
1.2 配置应用属性

编辑src/main/resources/application.properties文件,设置Nacos服务器地址及应用名称:

spring.application.name=service-provider
server.port=8081
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
1.3 启用服务发现

在主类上加入@EnableDiscoveryClient注解以启用服务发现功能:

package com.example.provider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@EnableDiscoveryClient
public class ServiceProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceProviderApplication.class, args);
    }

    @RestController
    public static class EchoController {
        @GetMapping("/echo/{string}")
        public String echo(@PathVariable String string) {
            return "Hello, " + string;
        }
    }
}

2. 创建服务消费者

2.1 添加依赖

同样地,在消费者的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>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>
2.2 配置应用属性

为消费者项目指定不同的端口和应用名,同时保持Nacos服务器地址一致:

spring.application.name=service-consumer
server.port=8082
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
2.3 定义Feign客户端

定义一个Feign接口来表示对服务提供者的HTTP请求:

package com.example.consumer;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(name = "service-provider")
public interface EchoService {
    @GetMapping("/echo/{str}")
    String echo(@PathVariable("str") String str);
}
2.4 使用Feign客户端

在控制器或服务层注入并使用上述定义的Feign客户端:

package com.example.consumer;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ConsumerController {
    
    @Autowired
    private EchoService echoService;

    @GetMapping("/consume/echo/{string}")
    public String consume(@PathVariable String string) {
        return echoService.echo(string);
    }
}
2.5 启动类配置

确保启动类上也有@EnableDiscoveryClient@EnableFeignClients两个注解,以便启用服务发现和支持Feign客户端:

package com.example.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ServiceConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceConsumerApplication.class, args);
    }
}

按照以上步骤,您就可以成功搭建一个基于Spring Cloud Alibaba与Nacos的服务调用示例了。当服务提供者和服务消费者都运行起来后,可以通过访问http://localhost:8082/consume/echo/test来验证是否能够正确转发请求至服务提供者并获取响应。

Nacos server的安装和部署

Nacos server的安装和部署

Nacos 作为服务发现的核心组件,对于 Spring Cloud Alibaba (SCA) 应用实现远程调用至关重要。本部分将详细说明如何通过阿里云 MSE(微服务引擎)提供的免费试用服务来完成 Nacos 的部署。

准备环境和资源

首先,确保您的阿里云账号已经注册并且完成了实名认证。如果还没有阿里云账号,请先访问 阿里云官网 完成注册及实名认证流程。

准备专有网络VPC和交换机
  1. 如果您已有 VPC 和交换机,并且已经在该 VPC 内部署了微服务应用,那么无需新建。请确认此 VPC 将用于后续创建的 Nacos 实例。
  2. 若需要新建立 VPC 和交换机,参考创建和管理专有网络指南操作。
开通 MSE Nacos
  1. 访问阿里云免费试用页面,点击右上角“登录/注册”按钮并按照提示完成账户登录或注册。
  2. 登录后,在产品分类下找到“中间件 > 微服务引擎”,选择“注册配置 MSE Nacos/ZooKeeper”,点击“立即试用”。
  3. 在配置面板中设置以下选项:
    • 引擎类型:选择 Nacos。
    • 实例名称:输入自定义实例名称。
    • 资源组:使用默认资源。
    • 网络类型:根据实际情况选择专有网络或公网网络。
      • 对于 VPC 内的应用选择“专有网络”。
      • 公网环境下则选“公网网络”。若同时需要支持 VPC 和公网连接,也应选择“专有网络”并配置至少 1 Mbps 带宽。
    • 专有网络:指定已准备好的 VPC。
    • 交换机:从选定 VPC 中选择一个交换机。
    • 公网带宽:如需公网访问,设置最小 1 Mbps 的带宽。
  4. 确认服务协议并点击“立即试用”。

实例创建大约需要 3 至 5 分钟时间。完成后,您可以通过实例列表页面查看状态。当显示为“运行中”时,即可开始使用。

部署微服务应用并接入 Nacos

假设您有一个基于 Spring Cloud 的项目,下面是如何将其注册到上述创建的 Nacos 服务:

  1. 登录MSE 控制台,在实例列表中找到您刚创建的 Nacos 实例,并记录其访问地址,通常形式为 mse.XX.nacos.mse.aliyuncs.com:8848
  2. 打开您的 Spring Boot/Spring Cloud 项目的 application.propertiesapplication.yml 文件,在其中添加如下配置以指向您的 Nacos 服务器地址:
spring.cloud.nacos.discovery.server-addr=mse.XX.nacos.mse.aliyuncs.com:8848
  1. 保存更改并重启应用程序。这将使您的服务能够自动注册至 Nacos 并利用其服务发现功能。

至此,您已经成功地利用阿里云 MSE 的 Nacos 服务实现了 SCA 应用的服务发现功能。接下来可以进一步探索更多高级特性,比如配置管理等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值