有手就会!spring cloud 服务调用原理解析及最佳实践

Spring Cloud 微服务架构概述

Spring Cloud 是一套基于 Spring Boot 构建的微服务生态体系,它为开发者提供了一套完整的解决方案,帮助构建面向终端消费者的应用软件。当一个应用已经初步建立起来并且团队规模不断扩大时,采用 Spring Cloud 可以更好地处理后端服务的可用性、稳定性和提高开发人员之间的协作效率。通过将大型单体应用拆分为多个小型、独立的服务(即微服务架构),每个服务可以独立地开发、部署和扩展,从而提高了整个系统的灵活性和可维护性。

例如,在一个电商网站中,我们可以把订单管理、用户认证、库存控制等功能分别作为单独的服务来实现。这些服务之间通过定义良好的接口进行交互和服务调用,这样即使某个服务出现故障也不会影响到其他服务正常运行。此外,Spring Cloud 提供了诸如服务发现与配置中心、断路器机制等特性,进一步增强了系统的健壮性。总的来说,Spring Cloud 为构建复杂且高度分布式的系统提供了强大的支持。

Spring Cloud Alibaba组件概览

Spring Cloud Alibaba 是 Spring Cloud 的一个本地化实践,它结合了阿里巴巴在 Java 应用开发领域的多年经验,为业务的持续发展提供支持。以下是 Spring Cloud Alibaba 的主要组件介绍:

  • 服务发现与配置中心 - Nacos:用于服务注册、发现和动态配置管理。
  • 分布式定时任务 - SchedulerX:提供分布式任务调度能力。
  • 分布式事务 - Seata:实现分布式事务的一致性解决方案。
  • 限流降级 - Sentinel:提供流量控制、熔断降级等功能,保障系统的稳定性。
  • 分布式消息 - RocketMQ:高性能、低延迟的消息中间件,适用于大规模消息传递场景。
  • AI 集成 - Spring AI Alibaba:支持将AI功能集成到Spring应用中。
  • 同构服务调用 - Dubbo:高性能的RPC框架,支持多种协议和序列化方式。
  • 日志分析框架 - iLogtail:采集并处理日志数据,提供丰富的日志分析功能。
  • 静态编译 - GraalVM:通过静态编译技术优化应用性能,并支持多语言运行环境。

这些组件共同构成了 Spring Cloud Alibaba 生态系统,旨在简化微服务架构下的应用开发与运维工作。

Spring Cloud Alibaba服务调用实例

spring cloud alibaba服务调用实践

依赖引入

pom.xml 文件中添加以下依赖,以便能够使用 Nacos 的服务注册与发现功能及 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>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2022.0.0.0</version> <!-- 使用最新版本 -->
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR12</version> <!-- 使用兼容的Spring Cloud版本 -->
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
服务提供者配置

首先定义一个简单的 REST API 作为服务提供者。该服务将返回传入字符串的一个简单回显。

/src/main/resources/application.properties

spring.application.name=service-provider
server.port=8081
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

ProviderApplication.java

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 ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }

    @RestController
    class EchoController {
        @GetMapping(value = "/echo/{string}")
        public String echo(@PathVariable String string) {
            return "Hello, " + string;
        }
    }
}
服务消费者配置

接下来创建一个服务消费者应用,通过 OpenFeign 调用上面的服务。

/src/main/resources/application.properties

spring.application.name=service-consumer
server.port=8080
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

ConsumerApplication.java

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;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

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

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

    @RestController
    class TestController {
        @Autowired
        private EchoService echoService;

        @GetMapping("/call-echo/{str}")
        public String callEcho(@PathVariable String str) {
            return echoService.echo(str);
        }
    }
}
启动验证
  1. 确保 Nacos 服务器已启动,并且可以通过浏览器访问其控制台(默认地址:http://localhost:8848/nacos)。
  2. 首先运行服务提供者 (ProviderApplication)。
  3. 接着运行服务消费者 (ConsumerApplication)。
  4. 打开浏览器或使用工具如 Postman 访问 http://localhost:8080/call-echo/world,如果一切正常,你应该看到页面返回了来自服务提供者的响应:“Hello, world”。

以上步骤详细展示了如何基于 Spring Cloud Alibaba 和 Nacos 实现一个简单的服务间调用场景。这包括从项目初始化、依赖管理、到最终的应用部署和测试全过程。

Nacos服务的安装与配置

Nacos server的安装和部署

接下来我们要将Nacos作为服务发现的核心组件进行部署,并且以阿里云MSE(微服务引擎)的免费试用为例来实现这一目标。以下是具体的步骤说明:

第一步:准备环境和资源

准备专有网络VPC和交换机
  1. 如果您已有适合的VPC和交换机,并且在该VPC内部署了您的微服务应用,请确保后续创建注册配置中心实例时所选的VPC与此相同。
  2. 若需新建VPC和交换机,请参考创建和管理专有网络
开通微服务引擎注册配置 MSE Nacos/ZooKeeper
  1. 访问阿里云免费试用页面,登录或注册账号并完成实名认证。
  2. 选择“中间件 > 微服务引擎”类别下的“注册配置 MSE Nacos/ZooKeeper”,点击“立即试用”。
  3. 在配置面板中:
    • 选择引擎类型为Nacos
    • 设置自定义实例名称。
    • 根据您的需求选择适当的网络类型(专有网络、公网网络或者两者结合),注意如果选择公网还需额外承担公网费用。
    • 指定VPC与交换机。
  4. 阅读并同意相关协议后提交申请。创建过程大约需要3~5分钟,完成后访问MSE控制台查看实例状态,当显示为“运行中”即表示可以开始使用。

第二步:微服务应用部署及注册

将自行开发部署的微服务应用注册到MSE Nacos
  1. 登录至Nacos实例列表页,找到刚创建的实例,在“访问方式”列获取Nacos实例访问地址。
  2. 修改您的微服务应用配置文件以指向这个新的Nacos服务器地址。对于Spring Cloud应用,这通常意味着更新application.propertiesapplication.yml中的以下设置:
    spring:
      cloud:
        nacos:
          discovery:
            server-addr: mse.XX.nacos.mse.aliyuncs.com:8848
    
  3. 重新启动您的微服务应用以便使更改生效。

通过上述步骤,您就完成了基于阿里云MSE服务上Nacos Server的安装与微服务应用的注册过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值