玩转Spring全家桶之远程服务调用实战

spring 全家桶的整体介绍

Spring 全家桶为开发者提供了构建企业级应用所需的全方位支持。其中,Spring Boot 通过简化配置帮助快速搭建独立的、生产级别的基于 Spring 的应用;Spring MVC 则是用于开发 Web 应用程序的强大框架,支持模型-视图-控制器设计模式;Spring Cloud 提供了一套微服务架构下的解决方案,特别是其第二代实现 Spring Cloud Alibaba,使分布式系统构建变得更为简单高效;Spring Data 则简化了数据访问层代码编写,使得与不同数据库交互变得更加容易;而最新推出的 Spring AI,则专注于将人工智能集成到 Spring 应用中,让开发者能够更方便地利用机器学习等技术增强应用程序的功能。这些组件共同构成了一个全面且灵活的技术生态系统,旨在加速软件开发周期并提高产品质量。

spring 微服务 整体介绍

Spring Cloud 是 Spring 为构建微服务架构提供的一套全面解决方案,它作为 Spring 家族的重要组成部分,帮助开发者更高效地实现服务化开发。微服务架构是一种将单个应用程序分解为一组小型、独立的服务的方法,每个服务运行在自己的进程中,并通过轻量级机制(通常是 HTTP 资源 API)进行通信。这种模式下的系统设计能够显著提升应用的可维护性、扩展性和灵活性。

当团队规模扩大或项目复杂度增加时,传统的单体应用开发模式往往难以满足需求。这时,采用基于 Spring Cloud 的微服务架构就显得尤为必要了。Spring Cloud 不仅简化了微服务系统的构建过程,还提供了诸如服务发现与注册、配置管理、断路器、智能路由等一系列功能,以确保分布式系统中各个组件间的高效协作及整体系统的稳定运行。

例如,在一个典型的 Web 应用场景下,假设我们有一个电商网站,随着业务发展,原有的单体架构逐渐暴露出性能瓶颈和维护难题。转而使用 Spring Cloud 后,可以将整个应用拆分成用户管理、商品展示、订单处理等多个微服务。这样一来,不仅每个小团队可以专注于自己负责的服务模块,加快迭代速度,而且通过 Spring Cloud 提供的服务调用机制,如 OpenFeign 或者 RestTemplate 加载均衡策略,还能保证即使某个服务出现故障也不会影响到整个系统的正常运作。此外,利用 Spring Cloud Config 可以集中管理所有环境下的配置信息,大大降低了运维成本。总之,Spring Cloud 以其强大的生态体系支持,成为企业实施微服务战略时的理想选择。

spring cloud alibaba介绍

Spring Cloud Alibaba 是 Spring Cloud 当前最佳的本地化实践,结合了阿里在 Java 应用开发领域多年的实践经验,能够为业务的持续发展提供强有力的支持。它包括以下主要组件:

  • Nacos:用于服务发现与配置管理,帮助微服务实现动态的服务注册、发现和配置更新。
  • Sentinel:负责流量控制、熔断降级等,保障系统稳定性和可用性。
  • Seata:专注于分布式事务处理,确保跨服务操作的一致性。
  • RocketMQ:作为消息中间件,支持发布/订阅模式及消息队列功能,有助于解耦应用并提升系统的吞吐量。
  • Dubbo:一个高性能的RPC框架,支持透明接口调用,使得远程服务调用变得简单高效。
  • SchedulerX:提供分布式任务调度能力,适用于需要定时执行的任务场景。
  • GraalVM:支持将Java应用程序编译成原生镜像,提高启动速度和减少运行时内存消耗。
  • iLogtail:日志收集工具,能够快速地采集、清洗和上报各类日志数据。

这些组件共同构成了一个强大的微服务生态系统,极大地简化了开发者构建和维护复杂分布式系统的难度。

spring cloud alibaba服务调用实践

spring cloud alibaba服务调用实践

为了使用 Nacos 和 Spring Cloud Alibaba 来实现一次远程服务调用,我们需要完成以下步骤:

  1. 创建服务提供者:这个服务将提供一个简单的 REST API。
  2. 创建服务消费者:这个服务将通过 OpenFeign 或 RestTemplate 调用服务提供者的 API。

服务提供者配置

添加依赖

pom.xml 中添加必要的依赖项。这包括 Spring Boot、Spring Cloud 的相关依赖以及 Nacos Discovery 的依赖。

<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>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR12</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.6.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
配置文件

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
启用服务发现

在主类中添加 @EnableDiscoveryClient 注解以启用服务注册与发现功能。

@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;
        }
    }
}

服务消费者配置

添加依赖

同样,在消费者的 pom.xml 文件中加入 Spring Boot Web、Nacos Discovery 及 Feign 或 RestTemplate 相关的依赖。

<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>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR12</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.6.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
配置文件

设置消费者的服务名称及端口号,并指定 Nacos 服务器地址。

spring.application.name=service-consumer
server.port=8082
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
使用 Feign 进行服务调用

定义一个接口并通过 @FeignClient 注解声明该接口是一个 Feign 客户端。

@FeignClient(name = "service-provider")
public interface EchoService {
    @GetMapping("/echo/{str}")
    String echo(@PathVariable("str") String str);
}

然后在控制器里注入并使用这个客户端。

@RestController
public class ConsumerController {

    @Autowired
    private EchoService echoService;

    @GetMapping("/consume/{str}")
    public String consume(@PathVariable String str) {
        return echoService.echo(str);
    }
}

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

解释

  • 通过在服务提供者和服务消费者中都引入了 spring-cloud-starter-alibaba-nacos-discovery 依赖,我们能够利用 Nacos 实现服务注册与发现。
  • 服务提供者启动后会自动向 Nacos 服务器注册自己的位置信息,这样其他微服务就可以通过服务名找到它。
  • 在服务消费者这边,通过 Feign 定义了一个客户端接口来代理对服务提供者的 HTTP 请求。Feign 会根据服务名从 Nacos 获取实际的服务地址并发起请求。
  • 通过这种方式,我们可以轻松地实现基于 Nacos 的微服务间通信,而不需要直接处理 IP 地址或端口等底层细节。

Nacos server的安装和部署

Nacos server的安装和部署

依托知识分析问题的原因

要使用Nacos作为服务发现组件,首先需要确保Nacos服务器已正确安装并运行。对于希望快速开始且不想自行搭建Nacos服务器环境的用户来说,利用阿里云提供的微服务引擎(MSE)中Nacos实例的免费试用是一个不错的选择。这样不仅能够避免本地安装带来的复杂性,还能直接体验到云端托管的服务优势。

可执行的具体步骤

这里提供基于阿里云MSE Nacos实例的详细部署步骤:

  1. 准备工作

    • 确保已经拥有一个有效的阿里云账号,并完成实名认证。
    • 准备好将用于部署微服务应用的VPC及交换机(如果尚未创建,请先创建)。
  2. 开通MSE Nacos服务

    1. 访问阿里云免费试用页面,登录您的阿里云账号。
    2. 在产品类别下选择“中间件 > 微服务引擎”,点击“注册配置 MSE Nacos/ZooKeeper”下的“立即试用”按钮。
    3. 在接下来的配置页面中设置:
      • 引擎类型:选择Nacos。
      • 实例名称:自定义一个容易识别的名字。
      • 资源组:选择默认资源。
      • 网络类型:根据你的需求选择专有网络或公网网络。如果你的应用在VPC内,则应选专有网络,并指定相应的VPC与交换机;若需通过公网访问,则选择公网网络。
      • 公网带宽:如需通过公网访问,设置至少1 Mbps带宽。(注意,这会产生额外费用)
    4. 同意相关服务协议后,点击“立即试用”以完成申请过程。
    5. 创建实例大约需要3-5分钟时间,在此期间您可以通过MSE控制台监控状态变化,直到实例变为运行中。
  3. 获取Nacos地址信息

    • 当实例成功创建后,返回至MSE控制台,找到刚刚创建的Nacos实例,在“访问方式”一栏中记录下显示的Nacos实例访问地址(格式类似于mse.XX.nacos.mse.aliyuncs.com:8848)。
  4. 修改微服务应用配置

    • 打开您的Spring Cloud Alibaba项目,定位到application.propertiesapplication.yml文件。
    • 添加如下配置来指定新创建的Nacos实例为注册中心:
      spring.cloud.nacos.discovery.server-addr=mse.XX.nacos.mse.aliyuncs.com:8848
      
  5. 重启并验证

    • 保存更改后重新启动您的应用程序。
    • 应用程序启动时会尝试连接到指定的Nacos实例进行服务注册。您可以通过访问Nacos控制台检查是否成功注册了您的服务。

步骤解释

以上步骤涵盖了从准备环境到最终服务注册的全过程。首先通过阿里云平台简化了Nacos的安装流程,然后通过对Spring Cloud Alibaba项目的简单配置实现了对云上Nacos实例的支持。最后,通过重启应用和服务注册验证确保一切正常运作。这种方式极大地降低了入门门槛,使开发者可以更快地专注于业务逻辑开发而非基础设施管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值