超简单!spring 微服务之远程服务调用实战

Spring微服务架构概览

微服务是一种将单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,并通过轻量级机制(通常是HTTP资源API)进行通信。Spring Cloud作为构建微服务应用的解决方案之一,提供了丰富的组件来帮助开发者快速搭建分布式系统。可以认为Spring Cloud是面向终端消费者的应用软件开发中的一种最佳实践。比如当一个团队需要维护或扩展一个已经初步构建起来的Web或App应用时,随着团队规模的增长,对后端服务的可用性、稳定性和协作效率提出了更高要求。这时,采用服务化架构,即通过Spring Cloud技术栈将单体应用拆分成多个独立的服务,可以显著提高系统的灵活性和可维护性。

例如,在一个电商应用中,我们可以使用Spring Cloud将订单处理、用户认证、库存管理等不同功能模块划分为各自独立的服务。这些服务之间通过Spring Cloud提供的服务发现和服务调用机制相互通信。这样的设计使得每个子服务能够独立部署、更新,甚至可以根据实际负载情况弹性伸缩,从而大大提高了整个系统的响应速度与稳定性。同时,由于各服务间的高内聚低耦合特性,也增强了团队成员之间的协作效率。

Spring Cloud Alibaba概览:结合阿里多年经验的微服务解决方案

spring cloud alibaba是Spring Cloud目前最好的本地化实践,它结合了阿里巴巴在Java应用开发领域多年的实践经验,为业务的可持续发展提供了坚实的保障。其主要组件包括:

  • 服务发现与配置中心 - Nacos:提供动态服务发现、配置管理等功能。
  • 分布式事务 - Seata:支持分布式事务处理,保证数据一致性。
  • 限流降级 - Sentinel:通过流量控制、熔断降级等手段保护系统稳定性。
  • 分布式消息 - RocketMQ:高效可靠的消息队列服务,适用于削峰填谷等场景。
  • 同构服务调用 - Dubbo:高性能的RPC框架,简化服务间通信。
  • 静态编译 - GraalVM:提高应用启动速度和运行效率。
  • 日志分析框架 - iLogtail:收集并分析日志信息,便于问题追踪和性能监控。

Spring Cloud Alibaba远程服务调用实战

spring cloud alibaba服务调用实践

为了使用 Nacos 和 Spring Cloud Alibaba 实现一次远程服务调用,我们将通过以下步骤来完成配置和代码实现。这些步骤将包括如何设置项目依赖、如何配置 Nacos 服务发现功能以及如何编写具体的消费者和提供者代码。

1. 准备工作

确保您已经安装了 Java 环境(推荐 JDK 8 或更高版本)和 Maven,并且本地已启动 Nacos Server。Nacos 的安装与启动方式可以参考第1篇参考内容中的"安装 Nacos Server"部分。

2. 创建 Maven 工程

您可以选择在 IDE 中直接创建一个 Maven 工程或手动构建 pom.xml 文件。这里我们仅展示 pom.xml 的核心部分。

pom.xml 配置:

xml 复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>nacos-service-example</artifactId>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>2021.0.2</spring-cloud.version>
        <spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
    </properties>
    <dependencies>
        <!-- 引入Spring Boot Web Starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- 引入Spring Cloud Alibaba Nacos Discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
        </dependency>

        <!-- 引入Spring Cloud LoadBalancer -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>
3. 服务提供者配置及代码

服务提供者的应用配置 (application.yml):

yaml 复制代码
spring:
  application:
    name: service-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  port: 18082

服务提供者的主类及控制器 (ProviderApplication.javaEchoController.java):

java 复制代码
@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;
    }
}
4. 服务消费者配置及代码

服务消费者的依赖配置 (pom.xml 添加):

无需额外添加新依赖,保持与服务提供者一致即可。

服务消费者的配置 (application.yml):

yaml 复制代码
spring:
  application:
    name: service-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  port: 18083

服务消费者的 Feign Client 定义 (EchoService.java):

java 复制代码
@FeignClient(name = "service-provider")
public interface EchoService {
    @GetMapping("/echo/{str}")
    String echo(@PathVariable("str") String str);
}

服务消费者的主类及控制器 (ConsumerApplication.javaTestController.java):

java 复制代码
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }

    @Autowired
    private EchoService echoService;

    @RestController
    public class TestController {
        @GetMapping("/call-echo/{str}")
        public String callEcho(@PathVariable String str) {
            return echoService.echo(str);
        }
    }
}

以上就是基于 Nacos 和 Spring Cloud Alibaba 完成的一次完整的远程服务调用的详细过程。通过上述步骤,您应该能够成功地运行服务提供者和消费者,并通过访问消费者端提供的接口验证服务调用是否成功。具体验证方法可参照第5篇参考内容中关于验证服务发现效果的部分进行操作。

Nacos服务的安装与配置

Nacos server的安装和部署

为了将Nacos作为服务发现组件部署在阿里云的微服务引擎(MSE)上,并通过免费试用来实现远程调用,我们将遵循以下步骤。整个过程包括准备环境、开通MSE Nacos实例以及配置微服务应用以注册到该实例。

准备环境和资源

首先确保您拥有一个有效的阿里云账号,并完成了必要的实名认证。接下来,如果还没有专有网络VPC和交换机,请创建它们,或者使用已有的资源。请保证所使用的VPC与后续创建的Nacos实例位于相同的网络环境下。

  1. 访问阿里云官网并登录 :打开阿里云免费试用页面,点击右上角的登录/注册按钮,按照指示完成账号登录或注册流程。
  2. 选择产品试用:成功登录后,在"产品类别"下找到"中间件 > 微服务引擎",然后选择"注册配置 MSE Nacos/ZooKeeper",点击"立即试用"。

开通微服务引擎注册配置 MSE Nacos

  1. 配置实例信息
    • 引擎类型:选择Nacos。
    • 实例名称:给您的Nacos实例起个名字。
    • 资源组:通常默认即可。
    • 网络类型:根据实际情况选择专有网络或公网网络。如果您的应用位于VPC内,则选择专有网络;若部分应用需要从公网访问,则需额外配置带宽。
    • 专有网络和交换机:指定您之前准备好的VPC及其下的交换机。
    • 公网宽带:如果您选择了公网网络,则设置适当的带宽值(如1Mbps),注意这可能产生额外费用。
  2. 确认并提交申请:阅读并接受服务协议,最后点击"立即试用"完成申请。等待几分钟直到新实例变为运行状态。

配置微服务应用以注册到MSE Nacos

  1. 获取Nacos实例地址:回到MSE控制台,在实例列表中找到刚才创建的Nacos实例,记下其访问地址。

  2. 更新应用程序配置 :对于Spring Cloud应用,编辑application.properties文件,添加如下配置行:

    properties 复制代码
    spring.cloud.nacos.discovery.server-addr=your_nacos_instance_address:8848

    your_nacos_instance_address替换为实际获取到的Nacos实例地址。

  3. 重启应用:保存修改后的配置文件,重新启动您的微服务应用,使其能够连接至MSE Nacos实例进行服务注册。

验证服务是否正常工作

  1. 检查服务状态:通过访问Nacos控制台或其他监控工具,确认您的微服务已经成功注册到Nacos服务器并且状态健康。
  2. 测试服务间通信:尝试发起一次跨服务调用请求,验证服务发现机制是否按预期运作。
相关推荐
猫猫不是喵喵.1 分钟前
【微服务】Feign 远程调用
spring cloud·微服务
AIGC绘画3 分钟前
Spring微服务概述之spring cloud alibaba服务调用实践
java·spring·微服务
wwangxu4 分钟前
Java 面向对象基础
java·开发语言
uzong21 分钟前
JDK高性能套路: 自旋(for(;;)) + CAS
java·后端
带刺的坐椅1 小时前
Spring SPI、Solon SPI 有点儿像(Maven 与 Gradle)
java·spring·solon·spi
冷眼看人间恩怨1 小时前
【Java】揭秘网络编程:深入探索其无尽奥秘与魅力
java·开发语言·tcp/ip·udp·tcp
猫猫不是喵喵.2 小时前
【微服务】Nacos 注册中心
spring cloud·微服务·eureka
程序员大佬超2 小时前
Consul微服务配置中心部署(在线安装)
微服务·consul
武昌库里写JAVA2 小时前
【MySql】-0.1、Unbunt20.04二进制方式安装Mysql5.7和8.0
spring boot·spring·毕业设计·layui·课程设计
Algorithm15762 小时前
JVM是什么,与Java的关系是什么,以及JVM怎么实现的跨平台性
java·开发语言·jvm