当前位置: 首页 > article >正文

Spring微服务概述之spring cloud alibaba服务调用实践

Spring微服务概述:架构与优势

微服务是一种架构风格,它将一个应用程序分解成一组小型、独立的服务,每个服务都运行在自己的进程中,并通过轻量级机制(通常是HTTP资源API)进行通信。这种方式提高了系统的灵活性和可维护性。Spring 微服务通常指的是基于Spring Cloud构建的微服务应用。Spring Cloud提供了一系列工具和服务来简化微服务开发,包括服务发现、配置管理、断路器等组件。

Spring Cloud可以视为构建面向终端消费者的应用软件的最佳实践之一。当团队规模扩大,且已有初步的应用架构时,采用Spring Cloud能够更好地提升后端服务的可用性和稳定性,同时促进团队成员之间的高效协作。例如,在开发一款电商Web应用时,随着业务增长,单体架构可能难以满足需求。此时,通过引入Spring Cloud并采取微服务架构,可以将订单处理、商品展示等功能模块拆分成独立的服务。这种做法不仅便于单独扩展各服务以应对特定负载,还支持更灵活的技术选型与更快捷地部署更新。此外,借助于Spring Cloud提供的服务调用机制,不同微服务之间能顺畅沟通,确保了整个系统的连贯性和一致性。

Spring Cloud Alibaba概述

spring cloud alibaba是Spring Cloud目前最佳的本地化实现之一,它结合了阿里巴巴在Java应用开发领域多年的实践经验。通过使用Spring Cloud Alibaba,开发者能够轻松地构建出高性能、稳定可靠的分布式系统,并为业务的持续发展提供坚实的保障。

  • Nacos:作为服务发现与配置中心,Nacos支持动态的服务注册与发现以及集中式的配置管理。
  • Sentinel:专注于流量控制、熔断降级等高可用防护能力,帮助您的应用更好地应对突发流量冲击。
  • Seata:提供了一种简单易用的方式来处理分布式事务,确保数据一致性。
  • RocketMQ:是一个分布式消息中间件,适用于大规模消息通信场景下的异步解耦和削峰填谷。
  • Dubbo:一款高性能的RPC框架,支持透明接口调用,简化微服务之间的相互调用过程。
  • SchedulerX:用于创建、调度、监控分布式定时任务,助力企业提高运维效率。
  • GraalVM:提供静态编译功能,将应用程序编译成独立可执行文件,以减少启动时间和内存占用。
  • iLogtail:一个轻量级的日志采集工具,能高效收集日志并发送至阿里云日志服务进行分析处理。

Spring Cloud Alibaba远程服务调用实战

spring cloud alibaba服务调用实践

为了实现一次远程服务调用,我们需要使用Nacos作为服务注册与发现中心,并结合Spring Cloud Alibaba来完成。以下是详细的步骤:

1. 环境准备
  • 确保Nacos Server已启动:根据Nacos官方文档安装并启动Nacos Server。
  • 项目依赖配置:在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>
    <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.x</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
2. 服务提供者配置
  • 创建服务提供者项目:新建一个Spring Boot项目作为服务提供者。
  • 配置文件设置:在application.propertiesapplication.yml中添加以下配置。
# 应用名称
spring.application.name=service-provider
# 服务器端口
server.port=8081
# Nacos服务地址
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 class EchoController {
        @GetMapping("/echo/{string}")
        public String echo(@PathVariable String string) {
            return "Hello, " + string;
        }
    }
}
3. 服务消费者配置
  • 创建服务消费者项目:新建另一个Spring Boot项目作为服务消费者。
  • 配置文件设置:同样地,在application.propertiesapplication.yml中添加如下内容。
# 应用名称
spring.application.name=service-consumer
# 服务器端口
server.port=8082
# Nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
  • 定义Feign客户端接口:为服务提供者定义一个Feign客户端。
@FeignClient(name = "service-provider")
public interface EchoService {
    @GetMapping(value = "/echo/{str}")
    String echo(@PathVariable("str") String str);
}
  • 注入并使用Feign客户端:将Feign客户端注入到控制器中,并通过它调用远程服务。
@RestController
public class TestController {

    @Autowired
    private EchoService echoService;

    @GetMapping(value = "/call-echo/{str}")
    public String callEcho(@PathVariable String str) {
        return echoService.echo(str);
    }
}
  • 启用Feign客户端:在主类上添加@EnableFeignClients注解以启用Feign客户端支持。
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ServiceConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceConsumerApplication.class, args);
    }
}
4. 启动并测试
  • 依次启动两个应用:首先启动服务提供者,然后启动服务消费者。
  • 访问服务消费者:打开浏览器或者使用工具如Postman,访问http://localhost:8082/call-echo/test,预期响应为Hello, test

以上步骤详细展示了如何使用Spring Cloud Alibaba结合Nacos进行远程服务调用的整个过程。从环境搭建、依赖引入、服务提供者与消费者的配置到最终的服务调用,每个环节都提供了具体的代码和配置说明,确保了方案的完整性和可执行性。

Nacos服务器的安装与配置

Nacos Server的安装和部署

详细的步骤

我们可以通过以下步骤来完成Nacos Server的部署以及将其用于服务发现。这里将详细地按照利用阿里云MSE免费试用来实现这一目标的方式进行描述:

  1. 访问阿里云免费试用页面

    • 访问阿里云免费试用链接。
    • 如果你还没有阿里云账号,请先注册一个;如果有,则直接登录你的账号。
  2. 选择并申请MSE Nacos实例

    • 在登录后的控制台上,从产品类别下选择“中间件 > 微服务引擎”。
    • 点击“注册配置 MSE Nacos/ZooKeeper”,然后点击“立即试用”按钮进入配置页面。
    • 配置选项包括选择引擎类型(选择Nacos)、自定义实例名称、选择资源组(默认即可)、确定网络类型(依据实际情况选择专有网络或公网网络)。如果您的应用同时需要VPC内和公网连接,请确保选择专有网络,并配置额外的公网带宽。
    • 根据自己的需求填写其他相关信息如专有网络、交换机等,对于公网宽带部分,如果您需要通过公网访问注册配置中心,记得设置1 Mbps的带宽。
    • 完成上述设置后,仔细阅读并同意服务协议,点击“立即试用”。
  3. 等待实例创建完毕

    • 实例创建大约需要3到5分钟。您可以通过访问注册配置中心实例列表页查看实例状态。当看到实例状态变为“运行中”时,表示该Nacos实例已成功创建并且可以开始使用。
  4. 获取Nacos访问地址

    • 登录到阿里云MSE控制台,在实例列表中找到刚创建好的Nacos实例。
    • 查看并记录下Nacos实例的访问地址,它通常是形如mse.XX.nacos.mse.aliyuncs.com:8848这样的格式。
  5. 配置微服务应用以连接Nacos

    • 对于基于Spring Cloud的应用,在其application.properties文件中添加如下配置:
      spring.cloud.nacos.discovery.server-addr=mse.XX.nacos.mse.aliyuncs.com:8848
      
    • 如果是Dubbo应用,则在其provider.xml配置文件中加入:
      <dubbo:registry address="nacos://mse.XX.nacos.mse.aliyuncs.com:8848" />
      
  6. 重启您的微服务应用

    • 保存所有更改并重新启动您的应用程序,以便让它们能够连接到新配置的Nacos服务器上。
  7. 验证配置是否成功

    • 可以通过访问Nacos控制台检查是否有新的服务被注册进来,或者尝试发起跨服务调用来看看是否能正常工作。

以上就是基于阿里云MSE免费试用来部署Nacos Server,并使其成为服务发现核心组件的全部过程。遵循这些步骤操作应该能够让您的微服务项目快速接入Nacos的服务注册与发现功能。


http://www.kler.cn/news/366922.html

相关文章:

  • 【C++】string类 (模拟实现详解 下)
  • Spring Boot技术在厨艺交流平台中的创新应用
  • 【Linux | 网络I/O模型】五种网络I/O模型详解
  • 数据结构------手撕链表(一)【不带头单向非循环】
  • 卷积神经网络评价指标
  • ubuntu GLEW could not be initialized : Unknown error
  • 在平面模型上提取凹多边形的点云处理
  • Unity引擎:游戏开发的核心力量
  • python 深度学习 项目调试 图像分割 segment-anything
  • 微信小程序 - 动画(Animation)执行过程 / 实现过程 / 实现方式
  • RabbitMQ 发布确认高级部分
  • 语音交互:重塑人机对话的未来
  • 【Nas】X-Doc:jellyfin“该客户端与媒体不兼容,服务器未发送兼容的媒体格式”问题解决方案
  • 量子计算突破:下一个科技革命的风口浪尖在哪里?
  • Spring Boot 集成 PDFBox 实现PDF电子签章的简单应用
  • AI大模型开发架构设计(16)——ChatGPT Code Interpreter应用场景和技术原理动手实践
  • 【Python爬虫实战】Selenium自动化网页操作入门指南
  • 数据结构------手撕链表(一)【不带头单向非循环】
  • 掌握预测的准确性——使用 VAEneu 和 CRPS 的概率方法
  • PMP–一、二、三模–分类–11.风险管理–机会风险应对策略
  • 【C++笔记】内存管理
  • 实现简道云与企业微信的自动化数据集成
  • [C#][winform]基于yolov8的道路交通事故检测系统C#源码+onnx模型+评估指标曲线+精美GUI界面
  • Java-图书管理系统
  • LeetCode105. 从前序与中序遍历序列构造二叉树(2024秋季每日一题 49)
  • 地磁传感器(学习笔记上)