spring cloud 服务调用学习笔记(含最佳实践代码)feign实现

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.propertiesapplication.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
  1. 访问阿里云免费试用页面。点击右上角的登录/注册按钮并按照提示完成账号登录、注册或实名认证。
  2. 登录后,在产品类别下选择 中间件 > 微服务引擎,找到 注册配置 MSE Nacos/ZooKeeper 卡片,点击立即试用
  3. 在面板上按需求配置相关选项:
    • 引擎类型:选择 Nacos
    • 实例名称:自定义一个易于识别的名字。
    • 资源组:通常选择默认即可。
    • 网络类型:
      • 客户端位于 VPC 内时,选择 专有网络
      • 客户端位于公网时,选择 公网网络
      • 若两处都需要访问注册中心,同样选择 专有网络 并配置至少 1 Mbps 的公网带宽。
    • 专有网络:选取客户端所在 VPC。
    • 交换机:从所选 VPC 下拉列表中指定合适的交换机。
    • 公网宽带:若通过公网访问,则设置不低于 1 Mbps 的带宽值。
  4. 同意服务协议后,点击立即试用提交申请。系统会自动开始创建实例,整个过程大约需要 3 至 5 分钟。之后可以通过 实例列表页 查看状态,确认实例运行正常。

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

  1. 登录 MSE 控制台,在访问方式列查看 Nacos 实例的访问地址,格式如 mse.XX.nacos.mse.aliyuncs.com

  2. 将上述获取到的地址添加到您的微服务应用配置文件中。对于 Spring Cloud 应用,编辑 application.propertiesapplication.yml 文件,增加如下配置:

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: mse.XX.nacos.mse.aliyuncs.com:8848
    
  3. 重启微服务应用使更改生效。

解释

以上步骤涵盖了从环境搭建到服务注册的全过程。首先,我们通过阿里云平台快速地启动了一个 Nacos 实例,然后通过简单的配置调整使得我们的微服务能够连接到这个 Nacos 服务发现中心。这样,各个微服务之间就可以利用 Nacos 提供的服务发现机制相互定位和通信了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值