Spring Cloud

springcloud 微服务

大憨熊 提交于 2020-03-17 12:34:54
某厂面试归来,发现自己落伍了!>>> 微服务 微服务架构:是一种架构模式,将一个应用程序划分为一组小的服务,每个服务运行在自己单独的进程中,服务之间通过HTTP的restful API相互沟通,相互协作、相互配合,为用户提供最终服务。微服务框架案例:www.b123.com. 强调避免集中式、统一的服务管理机制。 微服务·:是一个个微小的服务,强调的是服务的大小,狭义地说就是idea中一个个的model。将一个应用程序拆分后的各个独立模块。 微服务就好比医院中一个个独立的科室,牙科、骨科、外科等。而这些独立的科室就构成了医院,这就是微服务架构。 1 为什么有微服务? 传统的开发,将一个应用程序放在一个项目里面,打成一个war包,所有的模块,例如:订单、商品、交易、库存等,都在一个项目里面,这种服务称为巨石服务。All in one 这种架构一旦某个模块出问题,整个项目就会受到影响,甚至崩溃 分布式: 将一个服务应用,拆分为各个模块/服务,将模块独立出来,单独开发。各自有各自微小的进程,让专业的人,专业的模块做专业的事,让分工更加明确。各个模块独立部署 这种架构,服务之间不会影响,哪个模块出问题,受影响的只有那个模块,其它模块仍然可以工作。 微服务的作用 去耦合,各自的服务模块可以拥有自己的数据库,通过springcloudconfig,进行配置共同协作,各个模块可以单独的启动和销毁

Spring cloud 配置信息加密

早过忘川 提交于 2020-03-16 10:32:28
Spring cloud 配置信息加密 1,jce安装 使用JCE,下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html 需要对应相应版本的JDK,上面地址是jdk8的。 下载后打开解压有两个jar文件,把它们替换JDK安装目录下: %JAVA_HOME%\jre\lib\security 2,秘钥生成 使用java自带的keytool生成 keytool -genkeypair -alias config-server -keyalg RSA -keystore config-server.keystore 3,在服务中添加秘钥 注意:这个配置必须配置在bootstrap.yml中,因此在Config Server中我们需要新建bootstrap.yml并将配置写入。 4,加密方式: post请求这个接口 localhost:12000/encrypt Body为需要加密数据 解密调用decrypt (参考加密方法) 5,代码中的配置方式 ## 使用'{cipher} xxxx',xxxx代表需要解密的内容 ## 在properties文件中不需要单引号 来源: oschina 链接: https://my.oschina.net/u/4467378

服务限流算法的几种实现

孤街浪徒 提交于 2020-03-15 22:01:57
一、场景描述 由于业务应用系统的负载能力有限,为了防止非预期的请求对系统压力过大而拖垮业务应用系统。 面对大流量时,如何进行流量控制? 服务接口的流量控制策略:分流、降级、限流等。 本文讨论限流策略,虽然降低了服务接口的访问频率和并发量,却换取服务接口和业务应用系统的高可用。 实际场景中常用的限流策略: Nginx前端限流 按照一定的规则如帐号、IP、系统调用逻辑等在Nginx层面做限流 业务应用系统限流 1、客户端限流 2、服务端限流 数据库限流 红线区,力保数据库 按照服务的调用方,可以分为以下几种类型服务 1、与用户打交道的服务 比如web服务、对外API,这种类型的服务有以下几种可能导致机器被拖垮: 用户增长过快 因为某个热点事件(微博热搜) 竞争对象爬虫 恶意的刷单 这些情况都是无法预知的,不知道什么时候会有10倍甚至20倍的流量打进来,如果真碰上这种情况,扩容是根本来不及的 2、对内的RPC服务 一个服务A的接口可能被B C D E多个服务进行调用,在B服务发生突发流量时,直接把A服务给调用挂了,导致A服务对C D E 也无法提供服务。 这种情况时有发生,解决方案有两种: 1、每个调用方采用线程池进行资源隔离 2、使用限流手段对每个调用方进行限流 二、常用的限流算法 常见的限流算法有:计数器、令牌桶、漏桶。 1、计数器算法 采用计数器实现限流有点简单粗暴

一起了解 .Net Foundation 项目 No.19

ε祈祈猫儿з 提交于 2020-03-15 20:55:17
.Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧。 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译、如与原文存在出入,请以原文为准。 Salesforce Toolkits for .NET Salesforce Toolkits 为 .Net 开发人员提供了与 Force.com 和 Chatter 进行互操作的 REST API 原生类库。 项目详情 官方网站 项目源码 项目许可证: New BSD 项目联系人: Wade Wegner 相关链接 参与贡献 开发文档 参与讨论 笔者简评 Salesforce 全球知名的 CRM 服务供应商。快速交付的 SaaS 平台。是在专业领域以极致的标准化赢得市场的先锋队。不过笔者私以为,要在中国做好一个 2B 的企业级服务,恐怕个性化才是最难的。 可以作为如何构建 REST API 客户端库的参照项目。 英文介绍 Salesforce Toolkits for .NET The Salesforce Toolkits for .NET provide an easy way for .NET developers to interact with the Force.com & Chatter REST APIs using native libraries. Project Details

扎心一问:NIO 和 IO 到底有什么区别?

自作多情 提交于 2020-03-15 12:30:59
前言 最近在面试过程中有被问到,在Java反射中Class.forName()加载类和使用ClassLoader加载类的区别。当时没有想出来后来自己研究了一下就写下来记录一下。 解释 在java中Class.forName()和ClassLoader都可以对类进行加载。ClassLoader就是遵循双亲委派模型最终调用启动类加载器的类加载器,实现的功能是“通过一个类的全限定名来获取描述此类的二进制字节流”,获取到二进制流后放到JVM中。Class.forName()方法实际上也是调用的CLassLoader来实现的。 Class.forName(String className);这个方法的源码是 @CallerSensitive public static Class<?> forName(String className) throws ClassNotFoundException { Class<?> caller = Reflection.getCallerClass(); return forName0(className, true, ClassLoader.getClassLoader(caller), caller); } 最后调用的方法是forName0这个方法,在这个forName0方法中的第二个参数被默认设置为了true,这个参数代表是否对加载的类进行初始化

Spring Cloud Gateway 常用的predicate(断言)

你说的曾经没有我的故事 提交于 2020-03-14 15:13:18
参考入口:org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory类,如下图所示,共有以下几种常用断言。 这里就不对每一个断言做逐一介绍了。 配置方式: spring: ################################################################spring cloud gateway############################################################## cloud: gateway: routes: - id: XXX uri: XXX predicates: - Path= #这里指的是PathRoutePredicateFactory - After= #这里指的是AfterRoutePredicateFactory ....... 来源: oschina 链接: https://my.oschina.net/zhousc1992/blog/3194784

Springboot项目的接口防刷(实例)

一笑奈何 提交于 2020-03-13 14:39:14
技术要点:springboot的基本知识,redis基本操作, 首先是写一个注解类: import java . lang . annotation . Retention ; import java . lang . annotation . Target ; import static java . lang . annotation . ElementType . METHOD ; import static java . lang . annotation . RetentionPolicy . RUNTIME ; /** * @author yhq * @date 2018/9/10 15:52 */ @Retention ( RUNTIME ) @Target ( METHOD ) public @interface AccessLimit { int seconds ( ) ; int maxCount ( ) ; boolean needLogin ( ) default true ; } 接着就是在Interceptor拦截器中实现: import com . alibaba . fastjson . JSON ; import com . example . demo . action . AccessLimit ; import com . example .

我的Spring Cloud(四):RestTemplate的使用

冷暖自知 提交于 2020-03-13 10:57:09
上一篇我们已经学会了如何创建一个服务提供者,那么这一篇我们来创建一个服务消费者,实现思路是先通过Spring boot搭建一个微服务应用,再通过Eureka Client把它注册到注册中心Eureka Server,成为一个服务消费者。那么服务消费者如何调用服务提供者的接口呢,那么我们首先要来介绍一个组件RestTemplate的使用。 一、什么是RestTemplate RestTemplate 是 Spring 框架提供的基于 REST 的服务组件,底层是对 HTTP 请求及响应进⾏了封装, 提供了很多访问 RETS 服务的⽅法,可以简化代码开发。 二、如何使用RestTemplate 1.创建一个maven工程作为子服务 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>2.0.2.RELEASE</version> </dependency> 2.创建application.yml,代码如下 server: port: 8080 spring: application: name: consumer eureka: client: service-url:

springcloud底层学习

这一生的挚爱 提交于 2020-03-12 12:57:08
SpringCloud底层原理 1.eureka 1.1服务发现原理 Application Service :是一个Eureka Client ,扮演服务提供者的角色,提供业务服务, 向Eureka Server 注册和更新自己的信息,同时能从Eureka Server 注册表中获取到 其他服务的信息。 Eureka Server :扮演服务注册中心的角色,提供服务注册和发现的功能。每个 Eureka Cient 向Eureka Server 注册自己的信息,也可以通过Eureka Server 获取到其 他服务的信息达到发现和调用其他服务的目的。 Application Client :是一个Eureka Client ,扮演了服务消费者的角色,通过Eureka Sever 获取注册到其上其他服务的信息,从而根据信息找到所需的服务发起远程调用。 Replicate: Eureka Server 之间注册表信息的同步复制,使Eureka Server 集群中不同 注册表中服务实例信息保持一致。 Make Remote Call :服务之间的远程调用。 Register :注册服务实例, Client 端向Server 端注册自身的元数据以供服务发现。 Renew :续约,通过发送心跳到S巳rver 以维持和更新注册表中服务实例元数据的有 效性。当在一定时长内, Server