Spring 全家桶新人入门指南:服务调用最佳实践

ops/2024/10/30 15:42:06/

spring__0">spring 全家桶的整体介绍

Spring 全家桶提供了一整套解决方案,覆盖了从基础框架到企业级应用开发的各个方面。其中,Spring Boot 旨在简化新 Spring 应用的初始搭建以及开发过程,通过约定大于配置的原则来快速启动项目;Spring MVC 是构建 Web 应用程序的一种强大而灵活的方式,支持多种视图技术,并且与 Spring 框架其他功能紧密集成;Spring Cloud 提供了一套微服务解决方案,包括服务发现、配置管理、断路器、智能路由等功能,特别地,Spring Cloud Alibaba 对接入阿里巴巴开源生态中的组件进行了优化和封装;Spring Data 则大大简化了数据访问层的实现,为不同的数据库提供了统一的数据访问抽象;最新加入的 Spring AI 则致力于将人工智能能力无缝集成进 Spring 生态中,使开发者能够方便快捷地在他们的应用程序里添加 AI 功能,如自然语言处理等。通过这些工具,开发者可以更容易地创建出高效、可维护的企业级应用。

spring___3">spring 微服务 整体介绍

Spring Cloud 是 Spring 家族中用于实现微服务架构的一套应用封装,是开发分布式系统的重要组件。微服务是一种将单个应用程序拆分成一组小型、独立的服务的方法,每个服务运行在自己的进程中,并通过轻量级机制(如 HTTP API)进行通信。这种方式可以增强系统的可维护性、灵活性和可扩展性。

定义中的 Spring 微服务实际上就是指 Spring Cloud。Spring Cloud 提供了一整套解决方案来帮助开发者轻松构建面向终端消费者的微服务应用。典型的场景是一个团队正在构建一个 Web 或者 App 应用,随着项目的逐渐成熟及团队规模的扩大,传统的单体架构可能不再适用。此时采用微服务架构,能够显著提高后端服务的可用性和稳定性,同时也能加强开发人员之间的协作效率。通过将大型的应用程序分解为更小、更容易管理的部分,即所谓的服务,不仅可以让不同的子服务保持高内聚低耦合的状态,还便于各自独立部署和升级。

例如,在一个电商平台上,订单处理、库存管理和用户认证等核心功能都可以被设计成单独的服务。这些服务之间通过定义良好的接口互相调用。当某个特定的功能需要更新或优化时,只需修改对应的服务而不必担心会影响到整个系统。这种架构模式下,Spring Cloud 提供了服务发现、配置中心、断路器等一系列工具来简化微服务开发流程,确保了即使是在复杂的网络环境下,各个服务也能够稳定可靠地工作。

spring_cloud_alibaba_10">spring cloud alibaba介绍

spring cloud alibaba是Spring Cloud目前最佳的本地化实践之一,它结合了阿里巴巴在Java应用开发领域多年的实践经验,为业务的可持续发展提供了强有力的支持。它包含了一系列组件,每个组件都旨在解决分布式系统中的特定问题。

  • 服务发现与配置中心 - Nacos:提供动态服务发现、配置管理和服务管理等功能。
  • 分布式定时任务 - SchedulerX:支持大规模分布式调度任务的管理和执行。
  • 分布式事务 - Seata:实现高性能和简单易用的分布式事务解决方案。
  • 限流降级 - Sentinel:保障系统的稳定性和可靠性,通过流量控制、熔断降级等功能防止系统被压垮。
  • 分布式消息 - RocketMQ:具有低延迟、高并发处理能力的消息中间件。
  • AI集成 - Spring AI Alibaba:提供了一套基于阿里云AI能力的应用开发框架。
  • 同构服务调用 - Dubbo:一款高性能的RPC框架,支持多种协议和序列化方式。
  • 静态编译 - GraalVM:提升应用启动速度并减少内存占用的工具。
  • 日志分析框架 - iLogtail:帮助用户高效收集和处理日志数据。

spring_cloud_alibaba_23">spring cloud alibaba服务调用实践

spring_cloud_alibaba_24">spring cloud alibaba服务调用实践

我们将通过Nacos作为服务注册与发现组件,并结合Spring Cloud Alibaba来实现一次远程服务调用。具体地,我们会使用RestTemplate和FeignClient两种方式来进行演示。下面是详细的步骤说明:

项目准备

确保已经安装并启动了Nacos Server。可以通过访问http://127.0.0.1:8848/nacos查看Nacos控制台确认其是否正常运行。

服务提供者配置

首先创建一个简单的服务提供者,该服务将向消费者暴露一个API接口。

  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>
    
  2. 应用配置:定义application.properties文件内容如下:

    spring.application.name=service-provider
    server.port=18082
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    
  3. 开启服务发现:在主类上添加@EnableDiscoveryClient注解以启用服务发现功能。

    java">@SpringBootApplication
    @EnableDiscoveryClient
    public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class, args);}@RestControllerclass EchoController {@GetMapping(value = "/echo/{string}")public String echo(@PathVariable String string) {return "hello Nacos Discovery " + string;}}
    }
    
服务消费者配置

接下来,我们将在另一个项目中配置服务消费者,它会调用上面的服务提供者所提供的API。

  1. 添加依赖:除了需要包含服务提供者相同的依赖外,还需要加入对spring-cloud-starter-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>
    
  2. 应用配置:同样设置好Nacos的连接信息及其他基本配置。

    spring.application.name=service-consumer
    server.port=18083
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    
  3. 配置Feign客户端:定义一个接口用来代表要调用的服务。

    java">@FeignClient(name = "service-provider")
    public interface EchoService {@GetMapping(value = "/echo/{str}")String echo(@PathVariable("str") String str);
    }
    
  4. 注入并使用Feign客户端:在消费者的控制器里注入这个Feign客户端,并使用它来发起请求。

    java">@RestController
    public class TestController {@Autowiredprivate EchoService echoService;@GetMapping(value = "/echo-feign/{str}")public String feign(@PathVariable String str) {return echoService.echo(str);}
    }
    
  5. 启用Feign支持:在消费者项目的主类上添加@EnableFeignClients注解。

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

以上就是利用Spring Cloud Alibaba结合Nacos实现服务间调用的具体过程。从上述步骤可以看出,通过合理配置依赖及注解,可以非常便捷地搭建起一套微服务架构下的服务注册、发现及调用体系。

Nacos server的安装和部署

Nacos Server的安装和部署

为了使用Nacos作为服务发现的核心组件,您需要先在云上完成Nacos的部署。这里以阿里云MSE(微服务引擎)提供的免费试用为例,详细说明如何部署Nacos实例并将其集成到Spring Cloud Alibaba应用中。

准备环境和资源
  1. 登录阿里云账号:访问阿里云免费试用页面,并登录您的阿里云账号。如果还没有账号,请按照指引注册一个。
  2. 选择产品试用:在产品类别下找到“中间件 > 微服务引擎”,点击进入。
  3. 申请试用:在“注册配置 MSE Nacos/ZooKeeper”卡片上点击“立即试用”按钮开始申请过程。
  4. 配置实例信息
    • 选择引擎类型为Nacos
    • 设置实例名称,可以根据项目需求自定义。
    • 如果您的客户端应用部署在VPC内,则网络类型选“专有网络”,反之则选“公网网络”。确保这里的VPC设置与后续连接的应用所在的VPC一致。
    • 配置专有网络及交换机信息,这一步骤要求已存在可用的VPC和交换机。
    • 公网宽带部分根据实际需要设定,但请注意额外产生的费用。
  5. 提交申请:确认无误后勾选服务协议并点击“立即试用”。

等待大约3-5分钟,直至实例状态变为“运行中”,此时可以开始下一步操作。

获取Nacos访问地址
  1. 登录MSE控制台。
  2. 在实例列表中找到刚刚创建的Nacos实例,记录下其访问地址,格式通常为mse.XX.nacos.mse.aliyuncs.com:8848
将应用接入Nacos
对于Spring Cloud应用
  1. 在您的微服务项目的application.propertiesapplication.yml文件中添加如下配置,将上述获取到的Nacos服务器地址填入:
    spring:cloud:nacos:discovery:server-addr: mse.XX.nacos.mse.aliyuncs.com:8848
    
  2. 重启您的Spring Boot应用,使其能够连接至Nacos进行服务注册与发现。
对于Dubbo应用
  1. 修改dubbo-provider.xml中的registry节点,设置正确的Nacos地址:
    <dubbo:registry address="nacos://mse.XX.nacos.mse.aliyuncs.com:8848" />
    
  2. 同样地,也需要对消费者端做相应修改以保证其能正确识别提供者的位置。
  3. 重启Dubbo服务,确保它们现在是通过Nacos来管理和查找彼此的位置。

以上步骤完成后,您的微服务就成功利用了MSE提供的Nacos服务实现服务发现功能。请确保所有相关的微服务都按照同样的方式配置好,以便于它们之间能够互相调用。


http://www.ppmy.cn/ops/129620.html

相关文章

巴西电商市场神仙打架,美客多多月蝉联访问量榜首,9月Temu位居巴西APP下载量榜首

巴西电商市场近年来呈现出强劲的增长趋势&#xff0c;预计2024年巴西电子商务市场的销售额将达到2043亿雷亚尔&#xff08;约合373亿美元&#xff09;&#xff0c;同比增长约10%。作为拉美地区最大的经济体&#xff0c;巴西吸引了众多电商平台和商家&#xff0c;巴西电商市场竞…

Hyperledger Fabric有那些核心技术,和其他区块链对比Hyperledger Fabric有那些优势

Hyperledger Fabric是一个模块化、权限化的企业级区块链平台&#xff0c;与比特币、以太坊等公有链相比&#xff0c;Fabric主要为私有链或联盟链设计&#xff0c;适用于企业应用。它包含多项核心技术&#xff0c;使其在企业级区块链应用中具有独特优势。以下是Fabric的核心技术…

Android Studio获取本地aar,最新依赖jar/aar

每次清缓存后打开Android Studio的项目都要加载依赖库很久&#xff0c;那是网络要下载 依赖库和各种指针索引构建&#xff0c;本文提供获取本地依赖库的aar方法&#xff0c;然后把aar以libs的包本地方式引入&#xff0c;减少网络下载&#xff0c;会把kts和groovy的代码都展示。…

分布式项目pom配置

1. 父项目打包方式为 pom <packaging>pom</packaging> 2. 父项目版本配置 <properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncod…

机器学习实战——基于随机森林与决策树模型的贷款违约预测全过程(附完整代码和可视化分析)

机器学习实战——基于随机森林与决策树模型的贷款违约预测全过程&#xff08;附完整代码和可视化分析&#xff09; 关于作者 作者&#xff1a;小白熊 作者简介&#xff1a;精通python、matlab、c#语言&#xff0c;擅长机器学习&#xff0c;深度学习&#xff0c;机器视觉&#…

使用 undici 为 Node.js 原生 fetch 请求设置代理

在 Node.js 项目中&#xff0c;有时需要通过代理服务器发送 HTTP 请求。然而&#xff0c;许多第三方库&#xff08;如原生 fetch&#xff09;无法直接支持 https-proxy-agent 或 socks-proxy-agent 等代理库。在这种情况下&#xff0c;可以通过 undici 提供的全局调度器为请求设…

从三方云服务器将数据迁移至本地,如何保障安全高效?

前言 在数字化时代&#xff0c;企业越来越多地依赖云服务来存储和管理数据。然而&#xff0c;随着业务的发展和需求的变化&#xff0c;企业有时需要将数据从第三方云服务器迁移到本地。这一过程不仅涉及大量的数据传输&#xff0c;还需要确保数据的安全性和迁移的高效性。本文…

云手机简述(概况,使用场景,自己部署云手机)

背景 最近经常会看到云手机的相关广告&#xff0c;手痒难耐&#xff0c;了解一下。 我的主要需求&#xff1a; Android 已 root&#xff0c;能够做一些自动化等高级功能。能够通过 远程adb 控制手机。能够尽量的少花钱&#xff0c;最好是能够提供动态创建删除手机的方式&…