Spring微服务学习笔记之Spring Cloud Alibaba远程服务调用实战

Spring微服务概述

微服务是一种架构风格,它将单个应用程序拆分为一组小型、独立的服务,每个服务实现特定的业务功能,并且可以独立部署和扩展。Spring 微服务即基于Spring Cloud框架构建的微服务应用。Spring Cloud提供了一系列工具和服务来简化分布式系统的开发,可以视为构建面向终端消费者的应用软件的一种最佳实践。例如,在一个团队开始构建Web或App应用时,随着项目的复杂度增加及团队规模扩大,传统的单体架构可能无法满足需求。此时采用服务化的方式,通过将系统分解为多个相互协作但又彼此隔离的服务,能够显著提高系统的可用性与稳定性,同时提升团队成员间的协作效率。

具体而言,当一个电商平台需要支持高并发访问以应对促销活动带来的流量激增时,利用Spring Cloud进行服务化改造就显得尤为重要。比如商品查询、订单处理、支付接口等核心功能被划分为不同的微服务后,不仅有助于分散压力、降低故障影响范围,还便于针对各个服务做精细化管理和优化。借助于Spring Cloud提供的诸如服务发现、负载均衡等功能,开发者能够轻松实现高效的服务调用,确保即使在极端情况下也能维持良好的用户体验。

Spring Cloud Alibaba概述

Spring Cloud Alibaba是Spring Cloud目前最佳的本地化实践之一,结合了阿里在Java应用开发领域多年的实践经验,为业务的可持续发展提供了坚实的保障。它包含了多个核心组件来支持微服务架构:

  • Nacos:作为服务发现与配置中心,提供动态服务注册、发现及配置管理功能。
  • Sentinel:专注于流量控制、熔断降级等容错机制,保证系统的稳定性。
  • Seata:分布式事务解决方案,确保跨服务操作的一致性。
  • RocketMQ:高效的消息中间件,适用于大规模消息处理场景。
  • Dubbo:高性能的RPC框架,简化了微服务间通信的过程。
  • SchedulerX:基于云上的分布式任务调度平台,易于管理和扩展。
  • GraalVM:用于实现静态编译,提高程序运行效率。
  • iLogtail:强大的日志收集与分析工具,便于监控系统状态。

这些组件共同构建了一个全面且高效的微服务生态系统。

Spring Cloud Alibaba远程服务调用实战

spring cloud alibaba服务调用实践

一、项目环境准备

在开始之前,请确保您已经安装了Java开发环境(JDK 1.8+)、Maven以及Nacos Server。如果还未安装Nacos,可以参考第2篇参考内容中的本地安装方式或者选择接入阿里云上的托管Nacos Server。

二、创建Maven项目

本示例将通过两个简单的Spring Boot应用来演示如何使用Spring Cloud Alibaba与Nacos实现一次远程服务调用。一个作为服务提供者(service-provider),另一个作为服务消费者(service-consumer)。两者都将注册到同一个Nacos实例上,并通过服务发现机制完成交互。

1. 服务提供者 (service-provider)

首先,我们需要构建service-provider应用。这个应用对外暴露了一个REST API接口,用于响应来自其他微服务的请求。

  • 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><version>2.2.5.RELEASE</version></dependency>
</dependencies>
  • application.properties (位于src/main/resources/目录下)
spring.application.name=service-provider
server.port=18082
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
  • ProviderApplication.java (启动类)
package com.example.provider;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class, args);}@RestControllerpublic static class EchoController {@GetMapping("/echo/{string}")public String echo(@PathVariable String string) {return "Hello, " + string + " from service-provider!";}}
}
2. 服务消费者 (service-consumer)

接下来是创建service-consumer应用,它将利用Spring Cloud LoadBalancer和OpenFeign来调用上述提供的服务。

  • 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><version>2.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
</dependencies>
  • application.properties
spring.application.name=service-consumer
server.port=18083
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
  • ConsumerApplication.java
package com.example.consumer;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerApplication {@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}
}
  • EchoService.java (Feign客户端)
package com.example.consumer;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/{str}")String echo(@PathVariable("str") String str);
}
  • TestController.java (测试控制器)
package com.example.consumer;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;
import org.springframework.web.client.RestTemplate;@RestController
public class TestController {@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate EchoService echoService;@GetMapping("/echo-rest/{str}")public String rest(@PathVariable String str) {return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);}@GetMapping("/echo-feign/{str}")public String feign(@PathVariable String str) {return echoService.echo(str);}
}

三、验证服务调用

现在,分别启动service-providerservice-consumer两个应用,并访问以下URL以确认服务调用是否成功:

  • 使用RestTemplate: http://localhost:18083/echo-rest/test
  • 使用Feign: http://localhost:18083/echo-feign/test

如果一切配置正确,您应该能看到类似于"Hello, test from service-provider!"的消息返回,这表明您的服务调用已经成功实现了!

以上步骤详细地展示了如何使用Spring Cloud Alibaba结合Nacos进行远程服务调用的过程,包括从依赖添加、基本配置设置到具体代码实现的所有细节。

Nacos服务器的安装与配置

Nacos server的安装和部署

安装 Nacos Server

首先,您需要选择是使用阿里云上的托管Nacos Server还是本地安装。对于本示例,我们将采用阿里云提供的免费MSE(微服务引擎)来快速体验Nacos服务发现的功能。

接入云上免费版本
  1. 访问阿里云免费试用页面:通过这个链接访问阿里云的免费试用服务,并登录您的阿里云账号。
  2. 找到并申请微服务引擎:在产品类别下选择“中间件 > 微服务引擎”,接着点击“注册配置 MSE Nacos/ZooKeeper”的“立即试用”按钮。
  3. 配置实例
    • 选择引擎类型为 Nacos
    • 输入自定义实例名称。
    • 在资源组中选择默认选项。
    • 如果您的应用将部署于VPC内,请选择网络类型为“专有网络”,并在下方指定相应的VPC和交换机;如果是在公网环境中,则选择“公网网络”。注意,如果您需要同时支持VPC内外的应用连接到注册配置中心,也应选择“专有网络”并配置至少1 Mbps带宽以启用公网访问。
  4. 完成创建:阅读并接受服务条款后点击“立即试用”提交您的申请。系统将自动开始创建Nacos实例,这通常需要大约3到5分钟时间。一旦实例状态变为“运行中”,即表示您可以开始使用了。

接入 Nacos 配置中心与服务发现

接下来,在您的Spring Cloud Alibaba (SCA) 应用程序中接入已创建好的Nacos实例,实现服务发现功能。

添加依赖

确保您的项目 pom.xml 中包含了如下依赖,以便引入Nacos的服务发现能力:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置服务发现

编辑 /src/main/resources/application.yaml 文件,添加Nacos服务端地址信息,以及任何其他必要的配置项。例如:

spring:cloud:nacos:discovery:server-addr: mse.XX.nacos.mse.aliyuncs.com:8848 # 使用您自己的Nacos服务器地址替换这里

请注意替换上述URL中的 mse.XX.nacos.mse.aliyuncs.com:8848 为实际从阿里云控制台获取的Nacos实例地址。

启动应用验证
  1. 按照常规方式启动您的Spring Boot应用程序,可以是直接通过IDE或构建后使用命令行。
  2. 应用成功启动后,它会自动向指定的Nacos服务器注册自身。您可以登录到Nacos控制台检查是否能看到新注册的服务。

以上步骤完成后,您的微服务就已经成功地利用了阿里云MSE上的Nacos作为其服务发现组件。这意味着不同微服务之间能够相互识别并通过服务名进行调用,而无需关心具体的IP地址等细节信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/57882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CTF--Misc题型小结

&#xff08;萌新笔记&#xff0c;多多关照&#xff0c;不足之处请及时提出。&#xff09; 不定时更新~ 目录 密码学相关 文件类型判断 file命令 文件头类型 strings读取 隐写术 尺寸修改 文件头等缺失 EXIF隐写 thumbnail 隐写 文件分离&提取 binwalk foremo…

索引的使用和优化

索引就是一种快速查询和检索数据的数据结构&#xff0c;mysql中的索引结构有&#xff1a;B树和Hash。 索引的作用就相当于目录的作用&#xff0c;我么只需先去目录里面查找字的位置&#xff0c;然后回家诶翻到那一页就行了&#xff0c;这样查找非常快&#xff0c; 创建一个表结…

短视频矩阵系统源码开发优势,短视频矩阵系统oem部署

短视频矩阵系统就是在多个短视频平台上构建自己的内容生态&#xff0c;通过多平台、多账号、多内容的运营策略&#xff0c;实现品牌曝光、用户引流、产品销售等目的。短视频矩阵的核心在于通过矩阵式的布局&#xff0c;实现资源优化配置和利用&#xff0c;提升企业市场竞争力。…

.Net 8 Web API CRUD 操作

本次介绍分为3篇文章&#xff1a; 1&#xff1a;.Net 8 Web API CRUD 操作https://blog.csdn.net/hefeng_aspnet/article/details/143228383 2&#xff1a;在 .Net 8 API 中实现 Entity Framework 的 Code First 方法https://blog.csdn.net/hefeng_aspnet/article/details/1…

【C++干货篇】——类和对象的魅力(四)

【C干货篇】——类和对象的魅力&#xff08;四&#xff09; 1.取地址运算符的重载 1.1const 成员函数 将const修饰的成员函数称之为const成员函数&#xff0c;const修饰成员函数放到成员函数参数列表的后面。const实际修饰该成员函数隐含的this指针&#xff08;this指向的对…

nuxt3项目创建

安装 npx nuxilatest init <project-name> 此时会出现报错&#xff0c;需要在host文件中加入 185.199.108.133 raw.githubusercontent.com 再次执行命令&#xff0c;进入安装 此处选择npm&#xff0c;出现下图表示安装成功 启动项目 执行npm run dev&#xff0c;访…

【力扣 + 牛客 | SQL题 | 每日4题】牛客大厂笔试真题SQLW6, W7, W8

1. 牛客大厂笔试真题SQLW6&#xff1a;统计所有课程参加培训人次 1.1 题目&#xff1a; 描述 某公司员工培训信息数据如下&#xff1a; 员工培训信息表cultivate_tb(info_id-信息id,staff_id-员工id,course-培训课程)&#xff0c;如下所示&#xff1a; 注&#xff1a;该公…

【大数据技术基础 | 实验五】ZooKeeper实验:部署ZooKeeper

文章目录 一、实验目的二、实验要求三、实验原理四、实验环境五、实验步骤&#xff08;一&#xff09;安装JDK&#xff08;二&#xff09;修改ZooKeeper配置文件&#xff08;三&#xff09;启动ZooKeeper集群 六、实验结果七、实验心得 一、实验目的 掌握ZooKeeper集群安装部署…

基于Netty构建WebSocket服务并实现项目群组聊天和实时消息通知推送

文章目录 前言需求分析技术预研Web端方案服务端技术 技术方案设计思路功能实现添加依赖自定义NettyServer自定义webSocketHandler使用NettyServer向在线用户发送消息 需要完善的地方 前言 我们的项目有个基于项目的在线文档编制模块&#xff0c;可以邀请多人项目组成员在线协同…

python爬虫-爬取蛋白晶体和分子结构

文章目录 前言一、环境准备二、爬取PDB蛋白结构1.下载指定数量的随机PDB2.下载指定靶标的PDB二、从ZINC爬取小分子mol2结构1.下载指定数量的随机分子2.下载指定分子三、从ChEMBL爬取小分子信息1.下载指定ID的SMILES(测试不成功,网站变成readonly了)四、总结爬虫1.查看对应的…

AMD锐龙8845HS+780M核显 虚拟机安装macOS 15 Sequoia 15.0.1 (2024.10)

最近买了机械革命无界14X&#xff0c;CPU是8845HS&#xff0c;核显是780M&#xff0c;正好macOS 15也出了正式版&#xff0c;试试兼容性&#xff0c;安装过程和之前差不多&#xff0c;这次我从外网获得了8核和16核openCore&#xff0c;分享一下。 提前发一下ISO镜像地址和open…

JavaScript完整笔记

JS引入 JavaScript 程序不能独立运行&#xff0c;它需要被嵌入 HTML 中&#xff0c;然后浏览器才能执行 JavaScript 代码。 通过 script 标签将 JavaScript 代码引入到 HTML 中&#xff0c;有两种方式&#xff1a; 内部方式 通过 script 标签包裹 JavaScript 代码 我们将 &…

安装Maven配置以及构建Maven项目(2023idea)

一、下载Maven绿色软件 地址&#xff1a;http://maven.apache.org/download.cgi 尽量不要选择最高版本的安装&#xff0c;高版本意味着高风险的不兼容问题&#xff0c;选择低版本后续问题就少。你也可以选择尝试。 压缩后&#xff1a; 打开后&#xff1a; 在该目录下新建mvn-…

SQLite 3.47.0 发布,大量新功能来袭

SQLite 开发团队于 2024 年 10 月 21 日发布了 SQLite 3.47.0 版本&#xff0c;我们来了解一下新版本的改进功能。 触发器增强 SQLite 3.47.0 版本开始&#xff0c;触发器函数 RAISE() 的 error-message 参数可以支持任意 SQL 表达式。在此之前&#xff0c;该参数只能是字符串…

SQL注入之sqlilabs靶场21-30题

重点插入&#xff1a;html表 第二十一题 分析过程&#xff1a;&#xff08;没有正确的账号密码是否能拿到Cookie&#xff1f;最后注释好像只能使用#&#xff0c;--好像无法注释&#xff09; 查看源码 这里输入账号密码处被过滤了 但Cookie被base64编码了 可以从Cookie入手 …

vue2结合echarts实现数据排名列表——前端柱状进度条排行榜

写在前面&#xff0c;博主是个在北京打拼的码农&#xff0c;工作多年做过各类项目&#xff0c;最近心血来潮在这儿写点东西&#xff0c;欢迎大家多多指教。 数据排名列表——图表开发&#xff0c;动态柱状图表&#xff0c;排名图 UI 直接搜到类似在线代码&#xff08;数据列表…

多线程——线程池

目录 前言 一、什么是线程池 1.引入线程池的原因 2.线程池的介绍 二、标准库中的线程池 1.构造方法 2.方法参数 &#xff08;1&#xff09;corePoolSize 与 maximumPoolSize &#xff08;2&#xff09;keepAliveTime 与 unit &#xff08;3&#xff09;workQueue&am…

Redis集群分片存储最佳实践,手把手搭建Redis集群

目录 一、Redis集群介绍1、设计目标2、为什么需要分片存储 二、官网集群方案三、搭建集群1、准备6个独立的Redis服务2、通过redis-cli工具创建集群3、检验集群4、集群重新分片5、故障转移测试6、集群扩容7、集群节点删除 四、集群关心的问题五、集群功能限制 一、Redis集群介绍…

蓝桥杯题目理解

1. 一维差分 1.1. 小蓝的操作 1.1.1. 题目解析&#xff1a; 这道题提到了对于“区间”进行操作&#xff0c;而差分数列就是对于区间进行操作的好方法。 观察差分数列&#xff1a; 给定数列&#xff1a;1 3 5 2 7 1 差分数列&#xff1a;1 2 2 -3 5 6 题目要求把原数组全部…

基于SpringBoot的高校体测管理系统设计与实现(源码+定制+开发)高校体测记录系统设计、高校体测信息管理平台、智能体测管理系统开发、高校体测记录系统设计

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…