Spring Cloud 微服务综述 | 含服务调用最佳实践

ops/2024/10/27 22:24:11/

Spring微服务架构综述

微服务是一种架构风格,它将单一应用程序拆分为一组小型、独立的服务,每个服务实现特定的业务功能,并且可以独立部署。在Spring生态系统中,提到Spring微服务通常是指利用Spring Cloud框架进行开发。Spring Cloud是一套基于Spring Boot构建的微服务生态体系,旨在提供一套解决方案来解决分布式系统中的常见问题,如服务发现、配置管理、断路器模式等。

采用Spring Cloud作为微服务架构的设计方案,在团队需要扩展其web或移动应用时显得尤为重要。随着项目规模的增长及团队成员数量的增加,传统单体架构可能不再适合需求的变化速度以及对稳定性和可维护性的要求。通过使用Spring Cloud提供的工具和服务,开发者能够更轻松地创建松耦合且高度内聚的服务组件。这不仅促进了跨功能小组间的协作效率,还增强了系统的整体可用性和弹性。

例如,假设一家公司正在运营一个在线购物平台,随着用户量的增长,原有的单体架构开始面临性能瓶颈。此时,他们可以选择采用Spring Cloud技术栈将后端逻辑划分为多个微服务,比如订单处理服务、库存管理系统、支付接口等。这样做的好处在于,每当某一部分功能需要更新或优化时,只需对该特定服务进行修改而不影响整个系统的运行。同时,通过Spring Cloud内置的支持(如Eureka用于服务注册与发现),这些分散开来的服务之间仍能高效地相互通信和调用,保证了用户体验的一致性与流畅度。

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框架,支持多种通信协议。
  • 静态编译 - GraalVM:可以将Java应用程序提前编译为本地代码,提高运行效率。
  • 日志分析框架 - ilogtail:用于收集和传输日志数据,便于后续的日志分析。

Spring Cloud Alibaba服务调用实战

spring cloud alibaba服务调用实践

要实现基于 Nacos 的 Spring Cloud Alibaba 服务调用,需要完成几个关键步骤:引入必要的依赖、配置 Nacos 服务地址、启用服务发现功能,并通过 RestTemplate 或者 FeignClient 来进行实际的服务消费。以下为具体的实施细节:

引入依赖

首先,在您的 pom.xml 文件中加入如下 Maven 依赖,以便使用 Nacos Discovery 和 OpenFeign(用于简化 HTTP 客户端的开发)。

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 引入 Nacos Discovery --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- 引入 Feign 支持 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
</dependencies>

确保已定义了适当的 Spring Boot 和 Spring Cloud 版本管理,以保证兼容性。

配置 Nacos 与应用信息

接下来,在 /src/main/resources/application.properties 中设置 Nacos 服务器地址及本应用程序的基本信息。

# 应用名称
spring.application.name=service-consumer# 服务器端口
server.port=18081# Nacos 服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

开启服务发现和 Feign 功能

在主启动类上添加 @EnableDiscoveryClient@EnableFeignClients 注解,开启服务注册与发现以及 Feign 的自动配置。

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

创建 Feign Client 接口

定义一个接口来代表您希望调用的远程服务。这里我们假设存在一个名为 service-provider 的服务提供者,它对外暴露了一个简单的字符串回显接口。

java">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/{string}")String echo(@PathVariable("string") String string);
}

编写 Controller 层逻辑

最后,在控制器层注入上面创建的 EchoService 并编写处理请求的方法。

java">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 TestController {@Autowiredprivate EchoService echoService;@GetMapping("/test-echo/{str}")public String testEcho(@PathVariable String str) {return echoService.echo(str);}
}

启动并测试

按照前面所述方式启动您的服务消费者项目。然后,您可以访问 http://localhost:18081/test-echo/hello 等 URL 来测试是否能够成功调用到由 service-provider 提供的远程服务。

以上步骤完整地演示了如何利用 Spring Cloud Alibaba 结合 Nacos 实现微服务间的相互调用。每一步骤都是基于实际需求而设计的,从引入必要的库文件开始,直到最终部署运行,整个过程都遵循了标准的最佳实践。

Nacos服务器的安装与配置

Nacos server的安装和部署

根据提供的我了解的信息,我们可以将Nacos服务器的安装和部署分为几个关键步骤来完成。首先,我们将使用阿里云上的MSE (微服务引擎) 来免费试用Nacos,因为这样可以简化本地环境配置过程,并快速体验到Nacos作为服务发现组件的功能。

第一步:准备环境和资源

在开始之前,请确保您已经拥有一个有效的阿里云账号,并且该账号已完成了必要的实名认证流程。

  1. 访问阿里云免费试用页面:通过点击这里进入阿里云官方网站的免费试用入口。
  2. 选择中间件 - 微服务引擎:从产品列表中找到并选择“中间件 > 微服务引擎”,接着定位到“注册配置 MSE Nacos/ZooKeeper”卡片上点击“立即试用”按钮。
  3. 进行相关配置
    • 引擎类型:选择Nacos
    • 实例名称:自定义您的实例名称。
    • 资源组:默认选择即可。
    • 网络类型:根据实际情况选择合适的网络类型。如果您计划在VPC内部署客户端应用,请选择专有网络;如果需要公网访问,则选择公网网络。若同时涉及VPC内及公网连接,则同样选择专有网络并设置1 Mbps带宽。
    • 专有网络:指定您的VPC。
    • 交换机:选择对应的交换机。
  4. 同意服务协议并提交申请:阅读服务条款后勾选确认框,并点击“立即试用”。

等待系统自动创建实例,通常这需要大约3至5分钟时间。之后您可以访问注册配置中心实例列表页,按照提示刷新页面以查看实例状态,直至显示为运行中即表示创建成功。

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

接下来我们需要将开发好的微服务应用或采用官方提供的Demo示例部署起来,并将其注册到刚刚创建的Nacos实例上去。

  1. 获取Nacos实例地址:登录至MSE控制台,于实例详情页下找到对应Nacos实例的访问地址。
  2. 配置微服务项目:对于Spring Cloud项目,在application.properties文件中添加如下配置:
    spring.cloud.nacos.discovery.server-addr=您的Nacos实例地址:8848
    
    对于Dubbo框架的应用,在其配置文件中加入类似设定。
  3. 启动微服务应用:按照正常流程启动您的微服务应用程序,使其能够与Nacos建立连接,并自动完成服务注册。
第三步:验证服务注册结果

一旦您的微服务程序成功运行并且连接上了Nacos,接下来就可以通过以下方式检查服务是否正确地被注册到了Nacos中。

  • 利用命令行工具:通过执行curl命令直接向Nacos查询特定服务的信息,例如:
    curl http://您的Nacos实例地址:8848/nacos/v1/ns/catalog/instances?serviceName=您的服务名&clusterName=DEFAULT&pageSize=10&pageNo=1
    
  • 观察控制台输出:也可以直接查看Nacos控制台上列出的所有服务及其健康状况。

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

相关文章

Spring中的参数统一配置

情景&#xff1a; 在一个Spring项目中通常存在如数据库 url&#xff0c;账号&#xff0c;密码等需要人为配置的参数&#xff0c;此类参数并非固定&#xff0c;很可能会发生变化&#xff0c;所以一般会统一集中在一个文件中&#xff0c;方便统一管理 解决方法 1.在项目resour…

多ip访问多网站

多IP访问多网站 1.预配操作 [rootlocalhost ~]# mount /dev/sr0 /mnt mount: /mnt: WARNING: source write-protected, mounted read-only. [rootlocalhost ~]# systemctl stop firewalld ----------关闭防火墙 [rootlocalhost ~]# setenforce 0 -------关闭selinux2.安装n…

15分钟学 Go 第 18 天:接口

第18天&#xff1a;接口 欢迎来到Go语言学习的第18天&#xff0c;今天我们将深入探讨接口&#xff08;interface&#xff09;这一重要概念。接口是Go语言中实现多态性的核心机制之一&#xff0c;能够帮助我们编写灵活且高效的代码。下面将详细介绍接口的定义、使用场景、示例代…

单目相机标定

利用ROS的Camera Calibration工具进行USB单目相机标定 标定前准备的东西编译运行标定代码移动棋盘格标定结果总结单目相机标定参考网址 标定前准备的东西 1.大型棋盘格:具有已知尺寸的棋盘格。本教程使用的是一个8x6的棋盘格,方格边长为108毫米。标定时使用棋盘格的内部顶点…

如何借助通达信API构建自动化交易系统?

炒股自动化&#xff1a;申请官方API接口&#xff0c;散户也可以 python炒股自动化&#xff08;0&#xff09;&#xff0c;申请券商API接口 python炒股自动化&#xff08;1&#xff09;&#xff0c;量化交易接口区别 Python炒股自动化&#xff08;2&#xff09;&#xff1a;获取…

AndroidStudio Koala更改jdk版本 2024-1-2

升级android studio版本到 AndroidStudio Koala之后&#xff0c;发现修改jdk版本的方式不同了。如下&#xff1a; 修改jdk版本

data_table_2 与 flutter 官方 DataTable 的区别

data_table_2 与 flutter 官方 DataTable 的区别 https://blog.csdn.net/ken2232/article/details/143181634 flutter 数据表增强库 data_table_2 错误问题 记录 (****) https://blog.csdn.net/ken2232/article/details/143180018 data_table_2 与 flutter 官方 DataT…

Python 判断键是否存在字典中(新手入门、实战案例)

在早期的Python2版本中&#xff0c;可以使用 dict.has_key()方法来判断一个键是否存在于字典中。 在Python3中&#xff0c;dict.has_key()方法被废弃了&#xff0c;不能再被使用。如果在Python3中尝试使用dict.has_key()方法会导致 AttributeError异常。 那在Python3中要如何判…