超简单!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-provider
  cloud:
    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-consumer
  cloud:
    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);
    }

    @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文件,添加如下配置行:
    spring.cloud.nacos.discovery.server-addr=your_nacos_instance_address:8848
    
    your_nacos_instance_address替换为实际获取到的Nacos实例地址。
  3. 重启应用:保存修改后的配置文件,重新启动您的微服务应用,使其能够连接至MSE Nacos实例进行服务注册。

验证服务是否正常工作

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于opencv答题卡识别判卷

项目源码获取方式见文章末尾&#xff01; 回复暗号&#xff1a;13&#xff0c;免费获取600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 **《------往期经典推荐------》**项目名称 1.【基于DDPG算法的股票量化交易】 2.【卫星图像道路检测DeepLabV3Plus模型】 3…

蓝桥杯 单片机 DS1302和DS18B20

DS1302 时钟 时钟试题 常作为实验室考核内容 控制三个引脚 P17 时钟 P23输入 P13复位 其他已经配置好 寄存器原理 定位地址 0x80地址 固定格式 0x57 5*107*1 57 小时写入格式 不同 首位区分 A上午 P下午 0为24小时制 1为12小时制 写入8小时 0x87 //1000 7 十二小时制 7…

H5的Canvas绘图——使用fabricjs绘制一个可多选的随机9宫格

&#x1f4e2;欢迎点赞 &#xff1a;&#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原创&#x1f4e2;作者格言&#xff1a;新的征程&#xff0c;最近一直被测试…

Django+Vue全栈开发旅游网项目首页

一、前端项目搭建 1、使用脚手架工具搭建项目 2、准备静态资源&#xff08;图片资源&#xff09; 将准备好的静态资源拖至public目录下 3、调整生产项目结构 公共的样式 公共js 首页拆解步骤 ①分析页面结构 标题、轮播图、本周推荐、精选景点、底部导航 ②新建页面组…

VAE中的“变分”什么

写在前面 VAE&#xff08;Variational Autoencoder&#xff09;&#xff0c;中文译为变分自编码器。其中AE&#xff08;Autoencoder&#xff09;很好理解。那“变分”指的是什么呢?—其实是“变分推断”。变分推断主要用在VAE的损失函数中&#xff0c;那变分推断是什么&#x…

第十二部分 Java Stream、File

第十二部分 Java Stream、File 12.1 Java Stream流 12.1.1体验Stream流 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合&#xff0c;存储多个字符串元素把集合中所有以"张"开头的元素存储到一个新的集合把"张"开头的集合中的长度为3的元素存…

OpenTelemetry 实际应用

介绍 OpenTelemetry“动手”指南适用于想要开始使用 OpenTelemetry 的人。 如果您是 OpenTelemetry 的新手&#xff0c;那么我建议您从OpenTelemetry 启动和运行帖子开始&#xff0c;我在其中详细介绍了 OpenTelemetry。 OpenTelemetry开始改变可观察性格局&#xff0c;它提供…

开挖 Domain - 前奏

WPF App 主机配置 Microsot.Extension.Hosting 一键启动&#xff08;配置文件、依赖注入&#xff0c;日志&#xff09; // App.xaml.cs 中定义 IHost private readonly IHost _host Host.CreateDefaultBuilder().ConfigureAppConfiguration(c > {_ c.SetBasePath(Envi…

JVM(HotSpot):GC之G1垃圾回收器

文章目录 一、简介二、工作原理三、Young Collection 跨代引用四、大对象问题 一、简介 1、适用场景 同时注重吞吐量&#xff08;Throughput&#xff09;和低延迟&#xff08;Low latency&#xff09;&#xff0c;默认的暂停目标是 200 ms超大堆内存&#xff0c;会将堆划分为…

CentOS 7 上安装 MySQL 8.0 教程

&#x1f31f; 你好 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

C#使用log4net结合sqlite数据库记录日志

0 前言 为什么要把日志存到数据库里&#xff1f; 因为结构化的数据库存储的日志信息&#xff0c;可以写专门的软件读取历史日志信息&#xff0c;通过各种条件筛选&#xff0c;可操作性极大增强&#xff0c;有这方面需求的开发人员可以考虑。 为什么选择SQLite&#xff1f; …

node和npm

背景&#xff08;js&#xff09; 1、为什么js能操作DOM和BOM? 原因&#xff1a;每个浏览器都内置了DOM、BOM这样的API函数 2、浏览器中的js运行环境&#xff1f; v8引擎&#xff1a;负责解析和执行js代码 内置API&#xff1a;由运行环境提供的特殊接口&#xff0c;只能在所…

Java面向对象编程高阶(一)

Java面向对象编程高阶&#xff08;一&#xff09; 一、关键字static1、static修饰属性2、静态变量与实例变量的对比3、static修饰方法4、什么时候将属性声明为静态的&#xff1f;5、什么时候将属性声明为静态的&#xff1f;6、代码演示 一、关键字static static用来修饰的结构…

从0到1学习node.js(npm)

文章目录 一、NPM的生产环境与开发环境二、全局安装三、npm安装指定版本的包四、删除包 五、用npm发布一个包六、修改和删除npm包1、修改2、删除 一、NPM的生产环境与开发环境 类型命令补充生产依赖npm i -S uniq-S 等效于 --save -S是默认选项npm i -save uniq包的信息保存在…

首席数据官和首席数据分析官

根据分析人士的预测&#xff0c;首席数据官&#xff08;CDO&#xff09;和首席数据分析官&#xff08;CDAO&#xff09;必须更有效地展示他们对企业和AI项目的价值&#xff0c;以保障其在高管层的地位。Gartner的最新报告指出&#xff0c;CDO和CDAO在AI时代需要重新塑造自身定位…

HDFS异常org.apache.hadoop.hdfs.protocol.NSQuotaExceededException

HDFS异常org.apache.hadoop.hdfs.protocol.NSQuotaExceededException 异常信息&#xff1a; Hive:org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: The NameSpace quota (directories and files) of directory /xxxdir is exceeded: quota10000 file count15001N…

【Python】为Pandas加速(适合Pandas中级开发者)

非常好的一篇文章&#xff0c;解决问题的方式和思路层层递进&#xff0c;透彻深刻。 Pandas是个好工具&#xff0c;好工具要用正确高效的方式使用&#xff0c;才能发挥出万钧之力。 英文水平较高可直接阅读原文。Fast, Flexible, Easy and Intuitive: How to Speed Up Your p…

linux创建自定义服务部署项目

1.进入linux单元服务文件夹 cd /etc/systemd/system/ 2.创建一个文件以.service结尾的文件 C#(.Net Core)、 Java、Python等语言&#xff0c;都可以通过linux自定义服务来部署项目&#xff0c;实现守护进程、实现开机自启 2.1例如创建my.service文件 这里以部署python项目为…

新华三H3CNE网络工程师认证—OSPF路由协议

OSPF是典型的链路状态路由协议&#xff0c;是目前业内使用非常广泛的IGP协议之一。本博客将对OSPF路由协议进行总结。 OSPF目前针对IPv4协议使用的是OSPFVersion2(RFC2328)&#xff1b; 针对IPv6协议使用OSPFVersion3(RFC2740)。如无特殊说明本章后续所指的OSPF均为OSPF Versi…