超简单!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. 测试服务间通信:尝试发起一次跨服务调用请求,验证服务发现机制是否按预期运作。
相关推荐
考虑考虑2 小时前
Jpa使用union all
java·spring boot·后端
用户3721574261352 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊3 小时前
Java学习第22天 - 云原生与容器化
java
渣哥5 小时前
原来 Java 里线程安全集合有这么多种
java
间彧5 小时前
Spring Boot集成Spring Security完整指南
java
间彧5 小时前
Spring Secutiy基本原理及工作流程
java
Java水解6 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆9 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学9 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole9 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端