Spring Cloud

浅谈目前最火的架构风格:微服务

痴心易碎 提交于 2020-08-08 07:48:52
微服务 微服务的由来 微服务的使用场景 微服务相较于单体架构的优点 微服务的本质 微服务的应用 微服务开发框架 微服务的由来 微服务最早由 Martin Fowler与James Lewis于2014年 共同提出,微服务架构风格是一种使用 一套小服务来开发单个应用 的方式途径, 每个服务运行在自己的进程中 ,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些服务使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。 微服务的使用场景 在传统的IT行业软件大多都是各种独立系统,他们的缺点就 是扩展性差,可靠性不高,维护成本高 。所以目前大部分公司都使用微服务进行开发。 微服务相较于单体架构的优点 (1) 单体架构所有的模块全都耦合在一块,代码量大,维护困难。 微服务每个模块就相当于一个单独的项目, 代码量明显减少,遇到问题也相对来说比较好解决。 (2) 单体架构所有的模块都共用一个数据库,存储方式比较单一。 微服务每个模块都 可以使用不同的存储方式 (比如有的用redis,有的用mysql等),数据库也是单个模块对应自己的数据库。 (3) 单体架构所有的模块开发所使用的技术一样。 (比如用的开发语言是Java,就得整篇是Java,但是微服务不同,他可以多个服务使用不同的语言) 微服务每个模块都可以使用

任何阶段都不能缺少的spring cloud微服务实战,快来解析一波

风流意气都作罢 提交于 2020-08-08 07:41:08
前言 “ 微服务 ” 架构在这几年被广泛传播, 变得非常火热. 以至于关于微服务架构相关的开源框架和工具都变得越来越活跃,比如: Net和xOSS、 Dubbo、 Apache T加ft 等。 Spring Cloud 也因为 Spring 社区在企业应用领域的广泛知名度和强大影响力, 受到了广大 架构师与开发者的高度关注。 从接触 Spring Cloud 开始, 我除了被其庞大的项目结构霞撼之外, 还被其所要完成的远大 目标所吸引。 该项目不同于其他 Spring 的优秀项目, 它不再是一个基础框架类, 而是一个更高层次的、 架构视角的综合性大型项目, 其目标旨在构建一套标准化的微服务解决方案, 让架构师、 开 发者在使用微服务理念构建应用系统的时候, 面对各个环节的问题都可以找到相应的组件来 处理。 引用网友戏称的一个比喻 : Spring Cloud 可以说是 Spring 社区为微服务架构提供的一个“ 全家桶 ” 套餐。 由于 “ 套餐 ” 中的组件通过一个社区进行包装与整合, 使得 “ 套餐 ” 中各个组件之间的 配合变得更加和谐, 这可以有效减少我们在组件的选型和整合上花费的精力, 所以它可以帮 助我们快速构建起基础的微服务架构系统。 目录 第一章 (基础知识) 第二章 (微服务构建Springboot) 第三章 (服务治理: Spring Cloud Eureka)

Spring Cloud Alibaba系列(五)sentinel实现服务限流降级

心不动则不痛 提交于 2020-08-08 07:36:36
一、sentinel是什么 sentinel的官方名称叫分布式系统的流量防卫兵。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。在Spring Cloud项目中最开始我们使用的是Hystrix,目前已停止更新了。现在Spring Cloud官方推荐的是rensilience4j。当然还有我们今天学习的sentinel。 Sentinel 具有以下特征: 丰富的应用场景 :Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。 完备的实时监控 :Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运 行情况。 广泛的开源生态 :Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。 完善的 SPI 扩展点 :Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。 二、sentinel实现限流 2.1

Spring Enable***功能

懵懂的女人 提交于 2020-08-08 06:20:46
spring博大精深,衍生出了两大系列:spring boot 和sping cloud快速业务开发模式。 我们进行具体开发时,经常看到这样以Enable*开头的注解,如图 等等好多例子。。。框架自带的Enable* @EnableAspectJAutoProxy 开启对AspectJ自动代理的支持 @EnableAsync 开启异步方法的支持 @EnableScheduling 开启计划任务的支持 @EnableWebMvc 开启Web MVC的配置支持 @EnableConfigurationProperties 开启对 @ConfigurationProperties 注解配置Bean的支持 @EnableJpaRepositories 开启对SpringData JPA Repository的支持 @EnableTransactionManagement 开启注解式事务的支持 @EnableCaching 开启注解式的缓存支持 看到不少网文吹嘘的上天了、神乎其威,我只说一句话: 它(指Enable*)只是一种注解 ,可参考我的博文: Spring中@Import的三种情况 https://my.oschina.net/u/154866/blog/4290666 和 Spring Bean注册的几种方式 https://my.oschina.net/u/154866/blog

小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查

天大地大妈咪最大 提交于 2020-08-08 05:07:41
Mybatis Plus官方文档已经很完善了,为什么还要写一个这样的文档? 官方文档注重知识结构的整理,没有注重学习者的学习顺序 官方文档中的案例注重API描述,比较适合学会mybatis plus之后,遇到问题再去翻阅。对于第一次使用Mybatis的初学者进行学习不是非常友好。 官方文档考虑的是全面完整的介绍Mybatis Plus, 我考虑的角度是:“最佳实践”。 世界上很多东西都符合2/8原则,本文档的目的是将: 最重要最常用的那20%帮你提炼出来、快速上手应用! 。另外的那80%都是不常用的,有空自己再去官方文档里面学吧! 官网文档地址: https://mybatis.plus/guide/ 我会将此文档写成一个系列的内容,记得关注我!zimug.com 我会将此文档写成一个系列的内容,记得关注我!zimug.com 我会将此文档写成一个系列的内容,记得关注我!zimug.com 一、Spring Boot整合Mybatis Plus 通过maven坐标引入依赖 <!-- mybatis --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.2</version> </dependency> <!--

Maven快照版本要这样用才真的香!

风格不统一 提交于 2020-08-08 01:26:39
Bug的身世之谜 今天又分享一个问题解决的故事。请看下图框起来的错误,明显就是找不到这个class嘛! 图片 下面我们按照正常人的思路去排查这个问题,既然找不到class那就先看这个依赖的jar包有没有,如果没有那就是铁证如山。 但是事与愿违啊,编译后的lib目录下真的有这个包order-api-2.0-SNAPSHOT.jar 还是不相信,于是将order-api-2.0-SNAPSHOT.jar解压了,看看里面到底有没有我们需要的class,真的有,此处心情沉重。 一般人到这里就会懵圈了,但我还年轻啊,脑袋还够用。接下来看看classpath的配置有没有问题,如果order-api-2.0-SNAPSHOT.jar不在classpath中,那么自然就是找不到class啊,机智的我。 于是查看了META-INF/MANIFEST.MF文件,发现里面依赖的是order-api-2.0-20200225.024541-15.jar, 什么情况,还加上时间戳了。 终于真相大白了,classpath中指向的是order-api-2.0-20200225.024541-15.jar, 但lib中只有 order-api-2.0-SNAPSHOT.jar。 所以找不到class是没有错的。 打包配置信息 Maven deploy的时候会自动给快照版本加时间戳,从下图可以看的出来: 图片

Spring Boot Admin简介及实践

别等时光非礼了梦想. 提交于 2020-08-07 21:05:52
Spring Boot Admin简介及实践 问题 在若干年前的单体应用时代,我们可以相对轻松地对整个业务项目进行健康检查、指标监控、配置管理等等项目治理。如今随着微服务的发展,我们将大型单体应用按业务模型进行划分,以此形成众多小而自治的微服务,我们品尝到了微服务的甜头:异常隔离、独立部署和发布、服务伸缩、便于协作开发...我们的项目服务更加解耦合,高可用。但与此同时这也给我们带来了很多挑战,众多服务的健康检查、指标监控问题、配置管理、日志聚合问题、异常排查问题等等。我们急切需要一些工具或者手段来尽可能地解决这些问题,从而让我们收获微服务的最大化利益。 来源背景 codecentric的Spring Boot Admin是一个社区项目,用于管理和监视您的Spring Boot®应用程序。这些应用程序在我们的Spring Boot Admin Client中注册(通过HTTP),或者是通过Spring Cloud®(例如Eureka,Consul)发现的。 UI只是Spring Boot Actuator端点之上的Vue.js应用程序。 功能介绍 Spring Boot Admin提供了很多服务治理方面的功能,利用它能节省我们很多在治理服务方面的时间和精力Spring Boot Admin提供了如下功能(包括但不限于): 显示健康状态及详细信息,如JVM和内存指标、数据源指标

如何正确的安排Java学习路线

眉间皱痕 提交于 2020-08-07 20:56:32
没有基础怎么入行Java?如何合理安排学习路线?对于很多没有基础想要入行Java开发的人来说,最初Java的相关技能看起来特别吓人,满屏的英文代码,以及自己听不懂看起来难度极高的各种“架构”。但等你真正去学习,会慢慢发现这些并没有想象中难,下面小编带大家来看一看。 想要快速入行Java开发,那么我们要清楚目前市面对Java人员的要求是什么,以国内知名互联网企业腾讯招聘Java的需求来看,Java开发相关的岗位技能需求大致如下: 1、计算机相关专业本科及以上学历,5年以上JAVA开发经验,有三年以上大型公司(或系统)开发经验; 2、精通Spring、MyBatis、SpringMVC、Spring Boot等应用框架并熟悉实现原理; 3、熟悉分布式缓存、消息中间件、RPC框架、负载均衡、安全防御等技术,掌握各类中间件使用,包括zookeeper、redis、nginx、tomcat等; 4、精通SQL,熟练主流数据库Oracle/Mysql,具备优秀的数据建模能力和数据库分库分表设计能力; 5、有大型分布式、微服务系统架构经验,对服务治理有深入理解,使用过dubbo或spring cloud且有实际项目经验。 知道了招聘的需求后,我们要如何合理规划学习呢?一般需要经过四个阶段: 第一阶段:Java 基础以及 Web 开发基础—小程序项目阶段,让学员可掌握Java 基本面向对象知识

SpringCloud异常处理统一封装我来做-使用篇

不想你离开。 提交于 2020-08-07 19:05:18
SpringCloud异常处理统一封装我来做-使用篇 简介 重复功能我来写。在 SpringBoot 项目里都有全局异常处理以及返回包装等,返回前端是带上 succ 、 code 、 msg 、 data 等字段。单个项目情况下很好解决,当微服务模块多的情况下,很多情况开发都是复制原有代码进行构建另外一个项目的,导致这些功能升级需要修改多个服务,在这个基础上,我们封装了一个组件 unified-dispose-spring-cloud-starter 里面包含了一些基础的异常处理以及返回包装功能。 依赖添加启动功能 添加依赖 ps: 实际version版本请使用最新版 最新版本: 点击查看最新新版本 <dependency> <groupId>com.purgeteam.cloud</groupId> <artifactId>unified-dispose-spring-cloud-starter</artifactId> <version>0.3.0.RELEASE</version> </dependency> 启动类添加 @EnableGlobalDispose 注解开启以下功能。 @EnableGlobalDispose @SpringBootApplication public class GlobalDisposeSpringBootApplication {

学习MongoDB(三)

社会主义新天地 提交于 2020-08-07 16:34:03
今天我们来分享一下MongDB 整合SpringData 篇,小伙伴们准备好了吗? 一 . 环境搭建 1. 创建项目 1)创建maven项目 2) 确定项目坐标(组、标识、版本) 3)确定项目的位置 4)项目不存在,创建项目 2. 配置项目 1) 配置父项目 因为小喵使用的是Spring Could ,因此需要导入一下坐标 <!--1 确定spring boot的版本--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> </parent> <!--2 确定版本--> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <spring-cloud-release.version>Greenwich.RELEASE</spring-cloud-release.version> </properties> <!-- 3 锁定sprig cloud版本-->