Spring Cloud: 云原生微服务实践
文章目录
- 1. Spring Cloud 简介
- 2. Spring Cloud Eureka:服务注册与发现
- 在Spring Cloud中使用Eureka
- 3. Spring Cloud Config:分布式配置中心
- 在Spring Cloud中使用Config
- 4. Spring Cloud Hystrix:熔断器
- 在Spring Cloud中使用Hystrix
- 5. Spring Cloud Gateway:API网关
- 在Spring Cloud中使用Gateway
- 6. Spring Cloud OpenFeign:声明式服务调用
- 在Spring Cloud中使用OpenFeign
- 7. Spring Cloud Config:分布式配置中心
- 在Spring Cloud中使用Config
- 总结
1. Spring Cloud 简介
Spring Cloud 是由 Pivotal 团队提供的一种基于 Spring Boot 实现,为微服务架构提供的一套全面且集成化的解决方案。其主要目标是提供一种简单和可接受的开发方式来快速地构建分布式系统,包括配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、决策竞选、分布式会话等。
Spring Cloud 是一个拥有众多子项目的大家庭,每个子项目都为微服务开发提供了一种解决方案。它利用 Spring Boot 的开发便利性,巧妙地简化了分布式系统开发。Spring Cloud 为开发者提供了在分布式系统中快速构建常见模式的工具。例如,配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、领导选举、分布式会话和集群状态等模式都可以用 Spring Cloud 来实现。
使用 Spring Cloud,开发者可以快速地启动服务或者构建应用,同时能够快速和云服务进行对接。其丰富的微服务治理功能和对云计算(如外部化配置、服务发现、断路器)的天然支持,使得 Spring Cloud 成为微服务架构的理想选择。
2. Spring Cloud Eureka:服务注册与发现
服务注册与发现是微服务架构中的关键组成部分。由于微服务的数量可能很多,因此我们需要一个注册中心来跟踪这些服务的存在。Spring Cloud Eureka是Netflix开发的一种服务注册与发现的解决方案,Spring Cloud则将它集成在其子项目中。
Eureka包含两个组件:Eureka服务器和Eureka客户端。Eureka服务器就是服务注册中心,而Eureka客户端是一个Java客户端,用来简化与服务器的交互,作为一个内嵌式的,正在运行的客户端连接到Eureka服务器。
当微服务启动并向Eureka服务器注册自己的服务信息后,其他微服务就可以通过Eureka服务器来发现此服务。每个Eureka客户端都会维护一个服务实例的注册表,并定期通过心跳检查服务实例的可用性。如果服务实例在规定时间内未向Eureka服务器发送心跳,Eureka服务器将会从服务注册列表中删除该服务实例。
在Spring Cloud中使用Eureka
要在Spring Cloud中使用Eureka,您需要添加spring-cloud-starter-netflix-eureka-client依赖到您的项目中。然后,您可以在您的Spring Boot应用的主类中通过@EnableEurekaServer注解启用Eureka服务注册中心,或者通过@EnableEurekaClient注解启用Eureka客户端。
Eureka服务注册中心的配置通常包括以下内容:服务器端口、Eureka服务端地址、是否将自己注册到Eureka服务端等。这些配置可以通过application.yml或application.properties文件进行配置。
Eureka客户端的配置包括:Eureka服务端地址、服务实例名称、服务实例主机名、服务实例IP地址和端口等。这些配置同样可以通过application.yml或application.properties文件进行配置。
通过以上步骤,您就可以在Spring Cloud中使用Eureka进行服务注册与发现了。然后您就可以通过Spring Cloud的其他特性,如负载均衡、断路器等,来实现更高级的微服务交互。
3. Spring Cloud Config:分布式配置中心
在分布式系统中,由于服务实例数量众多且部署分散,统一管理所有服务的配置成为了一项挑战。Spring Cloud Config为微服务架构中的分布式配置提供了一种解决方案。
Spring Cloud Config分为Config Server和Config Client两部分。Config Server提供配置文件的存储、以及对外暴露接口服务,当Config Client启动或运行过程中需要获取或刷新配置信息时,直接通过Config Server提供的接口获取。Config Server可以集成Git、Svn等版本管理工具系统,从而支持配置版本管理。
在Spring Cloud中使用Config
配置 Config Server
要创建Config Server,您需要在启动类上添加@EnableConfigServer注解,并在配置文件中设置spring.cloud.config.server.git.uri属性,指定存放配置信息的Git仓库地址。如果Git仓库是私有的,还需要配置用户名和密码。
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}
}
配置 Config Client
Config Client在启动时会向Config Server请求配置信息,并缓存在本地。如果配置信息发生了变化,也可以动态地刷新。Config Client的主要配置包括Config Server的地址、应用名称、应用环境和应用分支等。
spring:application:name: myapp # 应用名称cloud:config:uri: http://localhost:8888 # Config Server地址profile: dev # 应用环境label: master # 应用分支
Spring Cloud Config支持消息总线,可以利用Spring Cloud Bus实现配置信息的动态刷新。当配置信息发生变化时,Config Server可以通过消息总线触发各个服务实例的刷新事件,从而避免了逐一刷新各个服务实例的麻烦。
通过以上步骤,您就可以在Spring Cloud中使用Config进行分布式配置管理了。然后您就可以集中管理所有服务的配置,简化配置管理的复杂性。
4. Spring Cloud Hystrix:熔断器
微服务之间通过远程调用方式进行通信,但是在分布式系统中,服务之间的调用经常会出现网络延迟、超时等问题。当对特定服务的调用发生问题并且持续一段时间之后,我们不希望服务的消费者因此被阻塞并一直等待响应。这时,我们就需要一个熔断器机制来预防这种情况,防止服务的雪崩效应。Spring Cloud Hystrix就是其中的一种解决方案。
Hystrix是Netflix开源的一款处理分布式系统的延迟和容错的开源库,它能帮助我们控制分布式服务之间的交互,从而使得系统在出现问题时仍然可以正常运行。Hystrix提供了熔断、隔离等一系列控制远程访问和故障处理的方法。
在Spring Cloud中使用Hystrix
启用Hystrix
要在Spring Cloud应用中使用Hystrix,首先需要在项目的pom.xml文件中加入spring-cloud-starter-netflix-hystrix的依赖。然后,在启动类上添加@EnableCircuitBreaker或@EnableHystrix注解,启用Hystrix的熔断功能。
@SpringBootApplication
@EnableCircuitBreaker
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
使用Hystrix
在需要进行熔断控制的方法上,添加@HystrixCommand注解,并在该注解中指定fallbackMethod属性,该属性的值就是当出现错误时,提供备用处理逻辑的方法名称。
@Service
public class MyService {@HystrixCommand(fallbackMethod = "fallback")public String normalMethod() {// 正常的逻辑处理}public String fallback() {// 备用逻辑处理return "fallback";}
}
以上就是在Spring Cloud中使用Hystrix的基本方式。除了熔断功能外,Hystrix还提供了隔离、限流、降级等服务保护机制,是构建微服务系统时的重要工具。
5. Spring Cloud Gateway:API网关
在微服务架构中,我们通常会有许多微服务实例,而外部客户端(如用户的浏览器或其他微服务)可能需要调用多个服务的接口来完成一项工作。为了简化客户端的调用,并提供统一的接口服务,我们可以使用API网关来封装内部服务的接口。Spring Cloud Gateway是Spring Cloud官方推出的第二代API网关,它是基于Spring 5,Spring Boot 2和Project Reactor等技术开发的网关,它旨在提供一种简单而有效的方式来路由API。
Spring Cloud Gateway提供了路由、过滤、限流、熔断等功能,可以帮助我们实现对微服务的统一访问入口,从而隔离了客户端和内部微服务的交互复杂性。
在Spring Cloud中使用Gateway
启用Gateway
要在Spring Cloud应用中使用Gateway,首先需要在项目的pom.xml文件中加入spring-cloud-starter-gateway的依赖。然后,只需要在application.properties或application.yml中进行简单的配置,就可以定义出路由规则。
spring:cloud:gateway:routes:- id: user_routeuri: lb://user-servicepredicates:- Path=/user/**
在上述配置中,我们定义了一个名为user_route的路由规则。该规则的含义是,当访问路径为/user/**时,将请求路由到user-service服务。"lb://"表示使用负载均衡的方式访问服务。
使用Gateway
在Gateway中,我们可以通过配置各种Predicate和Filter来实现复杂的路由规则和过滤逻辑。例如,我们可以添加一个Filter,将所有到/user/**的GET请求都重定向到/user/login页面:
spring:cloud:gateway:routes:- id: user_routeuri: lb://user-servicepredicates:- Path=/user/**filters:- RewritePath=/user/(?<segment>.*), /user/login
以上就是在Spring Cloud中使用Gateway的基本方式。通过Spring Cloud Gateway,我们可以轻松地实现对微服务的统一访问入口,极大地简化了客户端的调用逻辑。
6. Spring Cloud OpenFeign:声明式服务调用
在微服务架构中,服务间的远程调用是非常常见的场景。然而,直接使用RestTemplate等工具类进行远程调用,往往会产生大量的模板代码,使得程序难以维护。Spring Cloud OpenFeign是一个声明式的服务调用工具,它可以帮助我们简化服务间的远程调用。
Spring Cloud OpenFeign是基于Netflix Feign的,它通过简单的接口加注解的方式,就可以定义出服务间的远程调用。此外,Spring Cloud OpenFeign还整合了Ribbon和Hystrix,可以方便地实现负载均衡和熔断功能。
在Spring Cloud中使用OpenFeign
启用OpenFeign
要在Spring Cloud应用中使用OpenFeign,首先需要在项目的pom.xml文件中加入spring-cloud-starter-openfeign的依赖。然后,在启动类上添加@EnableFeignClients注解,启用OpenFeign的功能。
@SpringBootApplication
@EnableFeignClients
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
使用OpenFeign
在Spring Cloud中使用OpenFeign非常简单,只需要定义一个接口,并在接口上添加@FeignClient注解,指定服务名,然后在接口中定义与远程服务中的REST接口相对应的方法即可。
@FeignClient("user-service")
public interface UserService {@GetMapping("/user/{id}")User getUser(@PathVariable("id") Long id);
}
在上述代码中,我们定义了一个名为UserService的Feign客户端,该客户端可以用来调用名为user-service的服务的接口。当我们在代码中调用UserService的getUser方法时,实际上就是在调用user-service服务的"/user/{id}"接口。
以上就是在Spring Cloud中使用OpenFeign的基本方式。通过Spring Cloud OpenFeign,我们可以轻松地实现服务间的远程调用,极大地提升了开发效率。
7. Spring Cloud Config:分布式配置中心
在微服务架构中,由于服务实例数量多、环境复杂,对配置管理的要求很高。Spring Cloud Config提供了一种集中式的配置管理方案,它支持从远程Git仓库加载配置,支持配置的实时刷新,并且可以与Eureka、Zuul、Ribbon等组件配合,实现配置的动态更新。
Spring Cloud Config由两部分组成:Config Server和Config Client。Config Server是配置服务器,它从远程Git仓库加载配置,并提供给其他应用程序使用。Config Client是配置客户端,它在启动时会从Config Server获取配置,并且可以在运行时刷新配置。
在Spring Cloud中使用Config
启用Config Server
要创建一个Config Server,首先需要在项目的pom.xml文件中加入spring-cloud-config-server的依赖。然后,在启动类上添加@EnableConfigServer注解,启用Config Server的功能。
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}
}
在application.properties或application.yml中,需要配置远程Git仓库的地址、用户名和密码。
spring:cloud:config:server:git:uri: https://github.com/your-account/your-repousername: your-usernamepassword: your-password
启用Config Client
要在其他应用中使用Config Client获取配置,需要在项目的pom.xml文件中加入spring-cloud-starter-config的依赖。然后,在bootstrap.properties或bootstrap.yml中,配置Config Server的地址和应用的名称。
spring:application:name: your-applicationcloud:config:uri: http://localhost:8888
在上述配置中,your-application是应用的名称,它决定了Config Client将从Config Server加载哪个应用的配置。
以上就是在Spring Cloud中使用Config的基本方式。通过Spring Cloud Config,我们可以实现配置的集中管理和动态更新,大大提升了微服务的可配置性和灵活性。
总结
本篇博客介绍了Spring Cloud的主要组件和使用方法,包括Eureka、Hystrix、Zuul、Gateway、OpenFeign、Config等。这些组件各自完成了服务发现与注册、断路器、API网关、声明式服务调用、分布式配置中心等功能,是构建微服务架构的重要工具。
- Spring Cloud Eureka提供了服务发现与注册的功能,使得服务能够自动发现并调用其他服务。
- Spring Cloud Hystrix提供了断路器的功能,可以防止服务的雪崩效应,提高系统的可用性。
- Spring Cloud Gateway是第二代API网关,它们提供了统一的服务访问入口,简化了客户端的调用逻辑。
- Spring Cloud OpenFeign是一个声明式的服务调用工具,可以简化服务间的远程调用。
- Spring Cloud Config提供了集中式的配置管理方案,可以从远程Git仓库加载配置,并支持配置的实时刷新。
Spring Cloud为微服务架构提供了一整套解决方案,包括配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话等。这些都是在微服务架构中常见的问题,Spring Cloud为这些问题提供了易用、灵活的解决方案。
总的来说,Spring Cloud是构建微服务架构的强大工具,它将Spring Boot的简单、快捷的开发方式引入到微服务架构中,使得开发者能够专注于业务逻辑的开发,而不需要花费大量的时间和精力去处理分布式系统的复杂性。
相关文章:
Spring Cloud: 云原生微服务实践
文章目录 1. Spring Cloud 简介2. Spring Cloud Eureka:服务注册与发现在Spring Cloud中使用Eureka 3. Spring Cloud Config:分布式配置中心在Spring Cloud中使用Config 4. Spring Cloud Hystrix:熔断器在Spring Cloud中使用Hystrix 5. Sprin…...

存bean和取bean
准备工作存bean获取bean三种方式 准备工作 bean:一个对象在多个地方使用。 spring和spring boot:spring和spring boot项目;spring相当于老版本 spring boot本质还是spring项目;为了方便spring项目的搭建;操作起来更加简单 spring…...
39. 组合总和
给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被选取 。如…...
100行以内Python能做那些事
Python100 找到一个很好的python教程分享出来---->非本人 B站视频连接 100行以内的Pyhton代码可以做哪些有意思的事 按照难度1-5颗星,分为五个文件夹 希望大家可以补充 关于运行环境的补充 Python3.7 Pycharm社区版2019 关于用到的Python库,有些是自带的&am…...
Android 电源键事件流程分析
Android 电源键事件流程分析 电源按键流程处理逻辑在 PhoneWindowManager.java类中的 dispatchUnhandledKey 方法中 frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java从dispatchUnhandledKey方法开始分析 Overridepublic KeyEvent dis…...
游戏搬砖简述-1
游戏搬砖是一种在游戏中通过重复性的任务来获取游戏内货币或物品的行为。这种行为在游戏中非常普遍,尤其是在一些MMORPG游戏中。虽然游戏搬砖看起来很无聊,但是它确实是一种可以赚钱的方式,而且对于一些玩家来说,游戏搬砖也是一种…...

多线程基础总结
1. 为什么要有多线程? 线程:线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中实际运行单位。 进程:进程是程序的基本执行实体。 什么是多线程? 有了多线程,我们就可以让程序同时做…...

视频理解AI模型分类与汇总
人工智能领域视频模型大体也经历了从传统手工特征,到卷积神经网络、双流网络(2014年-2017年)、3D卷积网络、transformer的发展脉络。为了时序信息,有的模型也结合用LSTM。 视频的技术大多借鉴图像处理技术,只是视频比…...

【Linux】多线程 --- 线程同步与互斥+生产消费模型
人生总是那么痛苦吗?还是只有小时候是这样? —总是如此 文章目录 一、线程互斥1.多线程共享资源访问的不安全问题2.提出解决方案:加锁(局部和静态锁的两种初始化/销毁方案)2.1 对于锁的初步理解和实现2.2 局部和全局锁…...
17.模型的定义
学习要点: 1.默认设置 2.模型定义 本节课我们来开始学习数据库的模型部分的定义和默认值的设置。 一.默认设置 1. 框架可以使用 Eloquent ORM 进行数据库交互,也就是关系对象模型; 2. 在数据库入门阶段,我们已经创建了…...
golang 记录交叉编译sqlite的报错信息 go build -ldflags
go build -ldflags ‘-s -w --extldflags “-static -fpic”’ -o go-web main.go [gos20230512]# CGO_ENABLED1 CCaarch64-linux-gnu-gcc CXXaarch64-linux-gnu-g GOOSlinux GOARCHarm64 go build -ldflags -s -w --extldflags "-static -fpic" -o go-web m…...

ChatGPT AI使用成本
LLM “经济学”:ChatGPT 与开源模型,二者之间有哪些优劣权衡?谁的部署成本更低? 太长不看版:对于日均请求在 1000 次左右的低频使用场景,ChatGPT 的实现成本低于部署在 AWS 上的开源大模型。但面对每天数以…...

腾讯云与中电金信发布联合核心方案
5月11日,以“聚力革新,行稳致远”为主题的 “腾讯金融云国产化战略峰会”在北京举办,来自金融业、科技侧、研究机构的专家学者同聚一堂,共同探讨银行核心下移方法论以及国产化转型实践等话题。会议期间,中电金信副总经…...

老胡的周刊(第090期)
老胡的信息周刊[1],记录这周我看到的有价值的信息,主要针对计算机领域,内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 🎯 项目 privateGPT[2] 为保证数据私密性,…...

2023-数仓常见问题以及解决方案
01 数据仓库现状 小 A 公司创建时间比较短,才刚过完两周岁生日没多久;业务增长速度快,数据迅速增加,同时取数需求激增与数据应用场景对数据质量、响应速度、数据时效性与稳定要求越来越高;但技术能力滞后业务增长&…...

没关系,前端还死不了
前言 网络上的任何事情都可以在《乌合之众》书中找到答案。大众言论没有理性,全是极端,要么封神,要么踩死。不少人喷前端,说前端已死?前端内卷?前端一个月800包吃住? 对此我想说,“…...
OpenSSL-基于IP或域名生成自签名证书脚本
个人名片: 对人间的热爱与歌颂,可抵岁月冗长🌞 Github👨🏻💻:念舒_C.ying CSDN主页✏️:念舒_C.ying 个人博客🌏 :念舒_C.ying 一、安装 需要安装并配置Op…...
如何在C#中创建和使用自定义异常
C#是一种强类型语言,可以捕获和处理各种异常,从而帮助我们发现程序中出现的错误。在程序开发过程中,如果需要找到特定的错误情况并处理,这时就需要创建自定义异常。下面介绍一下如何在C#中创建和使用自定义异常。 1、什么是异常&…...

通过systemctl管理服务
文章目录 通过systemctl管理服务通过systemctl管理单一服务(service unit)使用案例服务启动/关闭/查看的练习关于systemctl命令启动/停止服务后面的后缀名是否加? 通过systemctl查看系统上所有的服务使用案例 通过systemctl管理不同的操作环境(target unit)使用案例…...
面经|小红书经营分析师
感觉面试官还挺严肃的,并且猎头说因为工作经验不够是外包岗位。 但是没想到最后败在了SQL上,很久没刷题了 平时工作中还是需要想下给公司整体带来的收益结果是什么,实际工作中不一定会用到,但是要有这个思路,面试的时候…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...