SpringCloud微服务架构

news/2024/5/14 5:32:48/文章来源:https://blog.csdn.net/web_13094729608/article/details/126793726

什么是微服务

微服务架构的基础是将的那个应用程序开发为一组小型独立服务,这些独立服务在自己的进程中运行,独立开发和部署。

SpringCloud Alibaba微服务:

Spring Cloud Alibaba 是Spring Cloud的一个子项目,致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。

核心组件

服务限流降级:

默认支持WebServlet、OpenFeign、RestTemplate、Spring Cloud GateWay、RocketMQ限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级Metrics监控

服务注册与发现:

基于Spring Cloud服务注册与发现标准,借助Nacos进行实现,默认还继集成了Ribbon支持

分布式配置管理:

基于Nacos支持分布式系统中的外部化配置,配置更改时自动刷新

消息驱动能力:

基于spring Cloud Stream为微服务应用构建消息驱动能力

分布式事务:

使用@GlobalTransactional注解,高效并且对业务零侵入地解决分布式事务问题

分布式任务调度:
提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker上执行。

IVProjects (工作区/空项目)
├── 01-sca //(微服务父工程)
├── sca-provider //服务提供方法
├── sca-consumer //服务消费方法
├── sca-gateway //网关服务

相关配置:

一:配置JDK编译环境

聚合工程在编译时,需要对相关依赖的工程进行一起编译,所以要做一些配置

指定JDK编译版本:

配置工作区中项目编码方式

第二步:配置项目pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<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.jt</groupId><artifactId>01-sca</artifactId><version>1.0-SNAPSHOT</version><dependencyManagement><dependencies><!--spring boot 核心依赖版本定义(spring官方定义)--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.3.2.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR9</version><type>pom</type><scope>import</scope><!--引入三方依赖的版本设计--></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.6.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId></dependency><!--mybatis依赖包--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1.tmp</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--lombok 依赖,子工程中假如需要lombok,不需要再引入--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope><!--provided 表示此依赖仅在编译阶段有效--></dependency><!--单元测试依赖,子工程中需要单元测试时,不需要再次引入此依赖了--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId>
<!--            <scope>test</scope>&lt;!&ndash;test表示只能在test目录下使用此依赖&ndash;&gt;--><exclusions><exclusion><!--排除一些不需要的依赖--><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.60</version><scope>compile</scope></dependency><!--其它依赖...--></dependencies><build><plugins><!--通过maven-compiler-plugin插件设置项目的统一的jdk编译和运行版本--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><!--假如本地库没有这个版本,这里会出现红色字体错误--><version>3.8.1</version><configuration><source>8</source><target>8</target></configuration></plugin></plugins></build></project>

Spring-Cloud一套完整的服务就需要以下部分中间件。

核心组件:

微服务指多个服务模块,而多个服务模块就需要一个服务注册中心,将多个模块融合在一起。并且可以进行模块相互之间互相调用。—Nacos

每个模块创建好后,需要统一的网关路径,设置路径跳转。所有的模块路径接口,都可以在网关服务中进行配置。 —Gateway

登录安全认证框架:SpringSecurity框架_的博客-CSDN博客[这里是图片005]https://blog.csdn.net/Java_Mr_Jin/article/details/125372715?spm=1001.2014.3001.5502

shiro框架_的博客-CSDN博客[这里是图片006]https://blog.csdn.net/Java_Mr_Jin/article/details/125052557?spm=1001.2014.3001.5502

Nacos服务注册中心:Nacos 服务注册中心_的博客-CSDN博客_nacos注册中心地址[这里是图片007]https://blog.csdn.net/Java_Mr_Jin/article/details/122125418?spm=1001.2014.3001.5502

Sentinel限流熔断:Sentinel限流熔断_的博客-CSDN博客[这里是图片008]https://blog.csdn.net/Java_Mr_Jin/article/details/122144393?spm=1001.2014.3001.5502

网关Gateway:

网关Gateway_的博客-CSDN博客_gateway java[这里是图片009]https://blog.csdn.net/Java_Mr_Jin/article/details/122300678?spm=1001.2014.3001.5502

消息中间件:

RabbitMQ_的博客-CSDN博客[这里是图片010]https://blog.csdn.net/Java_Mr_Jin/article/details/122867486?spm=1001.2014.3001.5502kafka消息中间件_的博客-CSDN博客_kafka消息中间件[这里是图片011]https://blog.csdn.net/Java_Mr_Jin/article/details/124926544?spm=1001.2014.3001.5502

ES分析引擎实时搜索:

Elasticsearch_的博客-CSDN博客[这里是图片012]https://blog.csdn.net/Java_Mr_Jin/article/details/122883009?spm=1001.2014.3001.5502

Redis缓存:

Redis缓存_的博客-CSDN博客[这里是图片013]https://blog.csdn.net/Java_Mr_Jin/article/details/122651874?spm=1001.2014.3001.5502

下面忽略:所有微服务相关中间件在上面都有对应文章

在vo包下编辑SysResult对象(SysResult.java)

说明: 该对象主要负责前端项目与后端项目的数据交互. 几乎所有的后台服务器的返回值都是SysResult对象.

package com.jt.vo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;import java.io.Serializable;@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class SysResult implements Serializable {private Integer status; //200业务执行成功 201业务执行失败private String msg; //服务器的提示信息private Object data; //封装后台返回值public static SysResult fail(){return new SysResult(201,"业务执行失败",null);}public static SysResult success(){return new SysResult(200,"业务执行成功",null);}//服务器返回业务数据public static SysResult success(Object data){return new SysResult(200,"业务执行成功",data);}public static SysResult success(String msg,Object data){return new SysResult(200,msg,data);}
}

lamda表达式遍历数组:

    List<String> datas = new ArrayList<>();//遍历datas.forEach(item->{System.out.println(item);});

最后

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

小编已加密:aHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFVrVm9aSGxQZUVsTlkwUnc==出于安全原因,我们把网站通过base64编码了,大家可以通过base64解码把网址获取下来。

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

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

相关文章

9--RNN

有隐藏状态的循环神经网络 假设在时间步t有小批量输入&#xff0c;即对于n个序列样本的小批量&#xff0c;的每一行对应于来自该序列的时间步t处的一个样本&#xff0c;用表示时间步t的隐藏变量。与MLP不同的是&#xff0c; 我们在这里保存了前一个时间步的隐藏变量&#xff0c…

《Mycat分布式数据库架构》之数据切分实战

文章目录1、引言2、前期准备2.1 系统环境2.2 数据库集群3 注意事项3.1 分片原则3.2 如何选择分片键4 数据切分实战4.1 配置访问用户及权限4.2 配置逻辑库及逻辑表4.3 配置分片规则4.3.1 简单取模分片4.3.2 哈希取模分片4.3.3 枚举分片4.3.4 字符串范围取模分片前文回顾&#xf…

Selenium操作已经打开的Chrome(只怪自己尝试的太迟)

&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d; &#x1f970; 博客首页&#xff1a;…

抖音视频

刻度尺读取方法0n:/ 复制打开抖音,看看【天子骄龙的作品】初中物理-刻度尺读数 ηηQ2VtW0nGyv8▽▽ 秒表读取方法 8.76 aNW:/ 复制打开抖音,看看【天子骄龙的作品】初中物理-秒表读数# 专业的事交给专业的人 初中物理... https://v.douyin.com/6RTySK2/

微信支付v3

文章目录前言1. 微信支付产品介绍2 接入指引2.1 获取商户号2.2 获取appid2.3 获取密钥和证书3 支付安全3.1 对称加密和非对称加密3.2 身份认证3.3 数字证书3.4 https中的数字证书3.5 微信支付中的证书密钥和签名4 基础支付apiv34.1 基础支付APly3-引入支付参数4.2 基础支付APly…

frame标签使用

当页面采用框架集的时候,如果点击,某个部分想在当前页面跳转到一个全新的无框架集的页面,可以在超链接中指定 target属性,如果指定为_top,则是整个页面,也可以指定某个frame 。 默认的几种值有: _self:当前frame(或者当前部分) _blank:打开新的一个窗口 _parent:当…

upload-labs靶场通关指南(9-11关)

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是upload-labs靶场通关指南&#xff08;9-10关&#xff09; 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; …

JavaScript每日一题_立即执行函数中函数名和变量同名,输出的是什么

立即执行函数中函数名和变量同名,输出的是什么 代码如下 var a 1;(function a() {a 2console.log(a)})();首先,不是输出2,也不是输出1 运行代码 输出的是函数a未定义 一句一句代码解读 实现 var a 1;会在window对象上挂载一个属性a,并赋值为1 然后是 (function a() {a …

.NET操作Excel高效低内存的开源框架 - MiniExcel

.Net平台上对Excel进行操作主要有两种方式。第一种,把Excel文件看成一个数据库,通过OleDb的方式进行读取与操作;第二种,调用Excel的COM组件。两种方式各有特点。 今天给大家介绍第三种方式:插件方式,目前主流框架大多需要将数据全载入到内存方便操作,但这会导致内存消耗…

【ZJSU - 大红大紫:ACM - Template】比赛用模板12:STL与库函数

模板整理12:STL与库函数(更新至v6.0,2022.09.10)\(\tt STL\) 与库函数 后继 \(\tt lower\_bound、upper\_bound\) lower 表示 \(\ge\) ,upper 表示 \(>\) 。使用前记得先进行排序。 //返回a数组[start,end)区间中第一个>=x的地址【地址!!!】 cout << lower…

剑指offer--重建二叉树

目录Start代码及分析EndingStart 代码及分析 在已知前序遍历和中序遍历之后&#xff0c;如何建树呢&#xff1f; 我们知道&#xff0c;在二叉树的前序遍历当中&#xff0c;第一个数字总是根结点的值。而在中序遍历中&#xff0c;根节点位于中间位置&#xff0c;根结点的左边是…

【数据结构】交换排序之冒泡排序与快速排序

承接上文&#xff1a; (32条消息) 【数据结构】常见排序之插入排序与选择排序_vpurple__的博客-CSDN博客https://blog.csdn.net/vpurple_/article/details/126568614?spm1001.2014.3001.5502https://blog.csdn.net/vpurple_/article/details/126568614?spm1001.2014.3001.55…

【算法刷题日记之本手篇】微信红包与计算字符串的编辑距离

⭐️前面的话⭐️ 本篇文章介绍来自牛客试题广场的两道题题解&#xff0c;分别为【微信红包】和【计算字符串的编辑距离】&#xff0c;展示语言java。 小贴士&#xff1a;本专栏所有题目来自牛客->面试刷题必用工具 &#x1f4d2;博客主页&#xff1a;未见花闻的博客主页 …

索引优化分析_预热_JOIN

索引优化分析_预热_JOIN1.性能下降SQL慢 执行时间长 等待时间长2.常见通用的Join查询2.1.SQL执行顺序2.2.Join图2.3.建表SQL2.4 7种JOIN2.5.扩展(掌门人)1.性能下降SQL慢 执行时间长 等待时间长 数据过多——分库分表 mycat索引失效&#xff0c;没有充分利用到索引——索引建立…

Java项目:ssm流浪狗领养系统

作者主页&#xff1a;夜未央5788 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 流浪狗领养网站是一个基于ssm(Spring SpringMVC MyBatis)的项目&#xff0c;项目分为前后台。 前台网站主要首页(包含轮播图、关键字搜索、点击排行…

常见的屏幕接口

常见的屏幕接口 常见的屏幕接口有: 6800、8080、RGB、I2C、SPI、MIPI-SDI、LVDS等今天聊一聊我最近想手动给我的esp8266开发板加一块LCD裸屏,网上找了有一遍绝大部分都是LCD屏幕模块,于是自己查了一通资料整理一下。我们平时用的大部分都是屏幕模块,而模块上面只有几个引脚而…

springboot学生成绩课堂表现过程性评价系统java

随着互联网技术的发发展,计算机技术广泛应用在人们的生活中,逐渐成为日常工作、生活不可或缺的工具,高校各种管理系统层出不穷。高校作为学习知识和技术的高等学府,信息技术更加的成熟,为校园教务管理开发必要的系统,能够有效的提升管理效率。一直以来,校园教务一直没有进行系统…

python-opencv之形态学操作(腐蚀和膨胀)原理详解

形态学操作作用 Removing noise.Isolation of individual elements and joining disparate elements in an image.Finding of intensity bumps or holes in an image. 最基本的形态操作是侵蚀和扩张。让我们更详细地了解这些操作。 Erosion 腐蚀 原理 它会侵蚀前景物体的边…

Spring Cloud Alibaba 中 Nacos 组件的使用

Spring Cloud Alibaba 微服务工具集 阿里巴巴版本: 2.2.1 Boot版本: 2.2.5 1.简介 Spring Cloud Alibaba provides a one-stop solution for distributed application development. It contains all the components required to develop distributed applications, making …

字符串匹配算法之——KMP算法

字符串匹配在日常开发中很常用,用于判断一个字符串中是否包含另外一个字符串,例如Java中的indexOf方法,查到则返回对应的位置,未查询到则返回-1。 如图-1,在“abcabd”中查找“abd”,最终在下标3的位置匹配。 图-1 至于是如何匹配的,直觉上…