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文件中添加必要的依赖项。
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中添加以下配置。
properties 复制代码
# 应用名称
spring.application.name=service-provider
# 服务器端口
server.port=8081
# Nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
  • 启用服务发现 :在主类上添加@EnableDiscoveryClient注解以启用服务发现功能。
java 复制代码
@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中添加如下内容。
properties 复制代码
# 应用名称
spring.application.name=service-consumer
# 服务器端口
server.port=8082
# Nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
  • 定义Feign客户端接口:为服务提供者定义一个Feign客户端。
java 复制代码
@FeignClient(name = "service-provider")
public interface EchoService {
    @GetMapping(value = "/echo/{str}")
    String echo(@PathVariable("str") String str);
}
  • 注入并使用Feign客户端:将Feign客户端注入到控制器中,并通过它调用远程服务。
java 复制代码
@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客户端支持。
java 复制代码
@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文件中添加如下配置:

      properties 复制代码
      spring.cloud.nacos.discovery.server-addr=mse.XX.nacos.mse.aliyuncs.com:8848
    • 如果是Dubbo应用,则在其provider.xml配置文件中加入:

      xml 复制代码
      <dubbo:registry address="nacos://mse.XX.nacos.mse.aliyuncs.com:8848" />
  6. 重启您的微服务应用

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

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

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

相关推荐
程序猿阿伟4 分钟前
《C++中的魔法:实现类似 Python 的装饰器模式》
java·c++·装饰器模式
Mr. zhihao6 分钟前
装饰器模式详解:动态扩展对象功能的优雅解决方案
java·开发语言·装饰器模式
Slow菜鸟7 分钟前
Spring 设计模式之装饰器模式
spring·设计模式·装饰器模式
2401_8576009513 分钟前
商场应急管理:SpringBoot技术解决方案
java·spring boot·后端
搬砖天才、15 分钟前
自动化部署-02-jenkins部署微服务
微服务·自动化·jenkins
想做白天梦25 分钟前
多级反馈队列
java·windows·算法
潇雷27 分钟前
算法Day12|226-翻转二叉树;101-对称二叉树;104-二叉树最大深度;111-二叉树最小深度
java·算法·leetcode
一颗甜苞谷34 分钟前
开源一套基于若依的wms仓库管理系统,支持lodop和网页打印入库单、出库单的源码
java·开源
半夏之沫36 分钟前
✨最新金九银十✨大厂后端面经✨
java·后端·面试