超简单!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 配置:

<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):

spring:application:name: service-providercloud:nacos:discovery:server-addr: 127.0.0.1:8848
server:port: 18082

服务提供者的主类及控制器 (ProviderApplication.javaEchoController.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):

spring:application:name: service-consumercloud:nacos:discovery:server-addr: 127.0.0.1:8848
server:port: 18083

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

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

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

@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}@Autowiredprivate EchoService echoService;@RestControllerpublic 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文件,添加如下配置行:
    spring.cloud.nacos.discovery.server-addr=your_nacos_instance_address:8848
    
    your_nacos_instance_address替换为实际获取到的Nacos实例地址。
  3. 重启应用:保存修改后的配置文件,重新启动您的微服务应用,使其能够连接至MSE Nacos实例进行服务注册。

验证服务是否正常工作

  1. 检查服务状态:通过访问Nacos控制台或其他监控工具,确认您的微服务已经成功注册到Nacos服务器并且状态健康。
  2. 测试服务间通信:尝试发起一次跨服务调用请求,验证服务发现机制是否按预期运作。

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

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

相关文章

精准医疗沟通新体验:开源语音识别(ASR)如何提升医生与患者对话

需求背景&#xff1a;一家远程医疗公司在为偏远地区提供在线医疗服务的过程中&#xff0c;发现传统手动记录方式效率太低&#xff0c;无法满足需求&#xff0c;影响就诊的效率。 解决方案&#xff1a;使用思通数科的ASR平台&#xff0c;公司可以实现多话者对话转录和自动病历生…

MySql中的事务、MySql事务详解、MySql隔离级别

文章目录 一、什么是事务&#xff1f;二、事务四大特性ACID2.1、原子性&#xff08;Atomicity&#xff09;2.2、一致性&#xff08;Consistency&#xff09;2.3、隔离性&#xff08;Isolation&#xff09;2.4、持久性&#xff08;Durability&#xff09; 三、事务操作/事务的用…

MySQL-27.多表查询-案例

一.数据准备 -- 分类表 create table category (id int unsigned primary key auto_increment comment 主键ID,name varchar(20) not null unique comment 分类名称,type tinyint unsigned not null comment 类型 1 菜品分类 2 套餐分类,sort …

今日所学1024和1026

1 简便方法&#xff1a; 在文件夹里找到dll的文件路径&#xff0c;然后在系统变量里添加对应路径&#xff0c; 就不会报错了。 2关于报Qt插件的错,解决办法如下 1026Github的2FA 超级详细的github双重验证密码忘记或者获取不了了怎么办&github recovery code忘记怎么办…

计算机网络:网络层 —— IPv4 地址与 MAC 地址 | ARP 协议

文章目录 IPv4地址与MAC地址的封装位置IPv4地址与MAC地址的关系地址解析协议ARP工作原理ARP高速缓存表 IPv4地址与MAC地址的封装位置 在数据传输过程中&#xff0c;每一层都会添加自己的头部信息&#xff0c;最终形成完整的数据包。具体来说&#xff1a; 应用层生成的应用程序…

洛谷 P3130 [USACO15DEC] Counting Haybale P

原题链接 题目本质&#xff1a;线段树 感觉我对线段树稍有敏感&#xff0c;线段树一眼就看出来了&#xff0c;思路出来得也快&#xff0c;这道题也并不是很难。 解题思路&#xff1a; 这道题能看出来是线段树就基本成功一半了&#xff0c;区间修改区间查询&#xff0c;就基…

「二叉树进阶题解:构建、遍历与结构转化全解析」

文章目录 根据二叉树创建字符串思路代码 二叉树的层序遍历思路代码 二叉树的最近公共祖先思路代码 二叉搜索树与双向链表思路代码 从前序与中序遍历序列构造二叉树思路代码 总结 根据二叉树创建字符串 题目&#xff1a; 样例&#xff1a; 可以看见&#xff0c;唯一特殊的就…

深度学习-循环神经网络-LSTM对序列数据进行预测

项目简介: 使用LSTM模型, 对文本数据进行预测, 每次截取字符20, 对第二十一个字符进行预测, LSTM层: units100, activationrelu Dense层: units输入的文本中的字符种类, 比如我使用的文本有644个不同的字符, 那么units64 激活函数: 因为是多分类, 使用softmax 因为这是最…

使用Vue.js构建响应式Web应用

&#x1f496; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4bb; Gitee主页&#xff1a;瑕疵的gitee主页 &#x1f680; 文章专栏&#xff1a;《热点资讯》 使用Vue.js构建响应式Web应用 1 引言 2 Vue.js简介 3 安装Vue CLI 4 创建Vue项目 5 设计应用结构 6 创建组件 7 使用…

2024“源鲁杯“高校网络安全技能大赛-Misc-WP

Round 1 hide_png 题目给了一张图片&#xff0c;flag就在图片上&#xff0c;不过不太明显&#xff0c;写个python脚本处理一下 from PIL import Image ​ # 打开图像并转换为RGB模式 img Image.open("./attachments.png").convert("RGB") ​ # 获取图像…

GCN+BiLSTM多特征输入时间序列预测(Pytorch)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 GCNBiLSTM多特征输入时间序列预测&#xff08;Pytorch&#xff09; 可以做风电预测&#xff0c;光伏预测&#xff0c;寿命预测&#xff0c;浓度预测等。 Python代码&#xff0c;基于Pytorch编写 1.多特征输入单步预测…

【大数据学习 | kafka】kafuka的基础架构

1. kafka是什么 Kafka是由LinkedIn开发的一个分布式的消息队列。它是一款开源的、轻量级的、分布式、可分区和具有复制备份的&#xff08;Replicated&#xff09;、基于ZooKeeper的协调管理的分布式流平台的功能强大的消息系统。与传统的消息系统相比&#xff0c;KafKa能够很好…

MySQL-DQL练习题

文章目录 简介初始化表练习题 简介 本节简介: 主要是一些给出一些习题, 关于DQL查询相关的, DQL查询语句是最重要的SQL语句, 功能性最复杂, 功能也最强, 所以本节建议适合以及有了DQL查询基础的食用, 另外注意我们使用的是Navicat, SQL编辑的格式规范也是Navicat指定的默认格式…

Android 15: 探索未来的可能性

Android 15: 探索未来的可能性 随着技术的不断进步,我们的智能手机系统也在不断地进化。Android 15,作为谷歌最新推出的操作系统版本,带来了一系列令人兴奋的新特性和改进,让我们的数字生活更加丰富多彩。本文将带你一探Android 15的新特性,感受科技的魅力。 低光增强:…

《云原生安全攻防》-- K8s攻击案例:权限维持的攻击手法

在本节课程中&#xff0c;我们将一起深入了解K8s权限维持的攻击手法&#xff0c;通过研究这些攻击手法的技术细节&#xff0c;来更好地认识K8s权限维持所带来的安全风险。 在这个课程中&#xff0c;我们将学习以下内容&#xff1a; K8s权限维持&#xff1a;简单介绍K8s权限维持…

安装OpenResty

OpenResty OpenResty 是一个基于 Nginx的高性能 Web 平台&#xff0c;用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。具备下列特点&#xff1a; 具备Nginx的完整功能 基于Lua语言进行扩展&#xff0c;集成了大量精良的 Lua 库、第三方模块…

python多线程处理xlsx,多进程访问接口

import pandas as pd from concurrent.futures import ThreadPoolExecutor# 读取Excel文件 file_path scence.xlsx df pd.read_excel(file_path)# 定义每10行处理逻辑 def process_rows(start_idx):end_idx min(start_idx 10, len(df)) # 处理每10行for i in range(start_…

【Linux系统】进程终止

一、进程退出方式 1、正常终止 主要两种类型&#xff1a;从 main 返回、调用 exit 和 _exit 具体讲解如下&#xff1a; &#xff08;1&#xff09;从 main 返回 这个的使用就不用多说了吧&#xff0c;相信你们已经烂熟于心了 作用&#xff1a;return 语句用于从函数中返回…

一篇文章了解RocketMQ基础知识。

目录 一. 为什么选择了 RocketMQ &#xff1f; 二. RocketMQ 介绍 名词说明 1. Topic (主题) 1.1 Topic 核心作用 1.2 Topic 常见问题 2. Tag (标签) 3. Queue (队列) 3.1 Queue 读写队列 4. Message &#xff08;消息&#xff09; 4.1 Message 类型 5. Produ…

NVR录像机汇聚管理EasyNVR多品牌NVR管理工具/设备视频报警功能详解

在科技日新月异的今天&#xff0c;视频监控系统作为现代社会的“第三只眼”&#xff0c;正以前所未有的方式深刻影响着我们的生活与社会结构。从公共场所的安全监控到个人生活的记录分享&#xff0c;视频监控系统以其独特的视角和功能&#xff0c;为社会带来了诸多好处&#xf…