Spring Cloud

失败的sentinel整合springcloud

风格不统一 提交于 2020-08-14 05:32:37
项目想上一个sentinel,整合到springcloud中,整个项目使用的是springcloud全家桶,不是阿里的那一个。 因为项目是放在docker中部署使用,所以第一步是整合到docker中,主要是解决sentinel的默认账号密码的问题。 新建 dockerfile文件。填写如下。 #指定使用的基础镜像 FROM java:8 #镜像的作者、作者邮箱 MAINTAINER longX@yunji.com #添加文件到容器中,注意,在打包的时候,这个文件需要放在同一级 ADD sentinel-dashboard-1.7.2.jar /sentinel-dashboard-1.7.2.jar #声明端口,需要开放多个端口则多一条expose EXPOSE 8081 #添加脚本 ADD start.sh /root #执行命令,相当于开机执行命令 ENTRYPOINT ["java", "-Dcsp.sentinel.api.port=8081", "-Dproject.name=sentinel-dashboard", "-Dsentinel.dashboard.auth.username=root", "-Dsentinel.dashboard.auth.password=root", "-jar","/sentinel-dashboard-1.7.2.jar"]

Spring Cloud升级之路

吃可爱长大的小学妹 提交于 2020-08-14 02:38:08
本系列示例与胶水代码地址: https://github.com/HashZhang/spring-cloud-scaffold 入口类注解修改 之前的项目,我们也许会用 @SpringCloudApplication 作为我们入口类的注解。这个注解包括: @SpringBootApplication @EnableDiscoveryClient @EnableCircuitBreaker public @interface SpringCloudApplication { } 其中的 @EnableDiscoveryClient 会启动服务发现的客户端,我们这里继续用Eureka,但是EurekaClient不需要这个注解,只要加上 spring-cloud-starter-eureka-client 的依赖,就会启动EurekaClient。对于 @EnableCircuitBreaker 这个注解,就比较麻烦了。我们引入了 spring-cloud-starter-netflix-eureka-client 依赖,这个依赖,包含了 hystrix 依赖,导致会自动启用 hystrix 实现 CircuitBreaker 接口,而我们并不想启用hystrix。并且,使用 SpringCloud 的 CircuitBreaker 的抽象接口,并不能完全使用

SpringCloud 应用在 Kubernetes 上的最佳实践 —— 线上发布(可回滚)

我们两清 提交于 2020-08-14 02:28:17
通常一次应用的线上发布就表示了一次新功能的上线。在上线过程中,可能发生一些非预期的情况,如新版本软件有bug,或者功能不达预期,就会影响了线上客户的使用。 为了尽快减少对线上用户的影响,发布系统需要提供回滚到前一个或前几个版本的能力。达到快速恢复线上业务的目的。 从应用的部署变更层次来看,可以分为以下三层: 所以对应了以下的回滚场景: 回滚应用内的配置,适用于由于应用配置变更导致的问题。此时如果应用能够实现动态的配置加载,通过回滚配置就能实现业务恢复的目的。否则需要重启应用 回滚应用代码的版本,适用于代码修改导致的问题。此时需要回滚代码的版本(镜像),重启应用。 回滚应用的工作负载与运维配置(基础设施层)。 应用内配置回滚 应用内的配置通常与应用系统需要或业务逻辑配置有关,如配置数据库的连接信息,业务规则配置等,配置的变更也很容易造成线上系统的问题,一般的做法是通过configmap或properties配置文件来实现,这种情况下很难做到动态推送和回滚的能力,因为回滚需要保存不同版本的配置。 通过 分布配置管理(ACM) (EDAS默认支持)很容易实现配置的集中管理,回滚和灰度,分布式推送,审计等功能。可以在ACM或EDAS的控制台上实现一键回滚,如下图所示: 应用代码回滚 Deployment是一种常见部署的应用的workload,回滚代码其实对应了回滚对应代码版本的镜像

eureka源码系列

孤人 提交于 2020-08-14 02:15:57
eureka源码系列 - 配置类 @Author:zxw @email: 502513205@qq.com @school:吉首大学 1.前言 对于我们刚学习eureka入门教程的同学来说,最常做的就是在配置文件上填写eureka相关参数信息,然后配合一个注解就成功启动了eureka服务,所以了解eureka的配置文件相关参数以及默认值也是非常重要的,就让我们一起打开源码看看 2.面试题 最近我在面试一家公司的时候,因为简历上有写springcloud微服务的项目,所以也问了我一些eureka相关面试题,因为是应届生所以总的来说难度挺低。 eureka的尝试重连次数是多少 // --answer eureka的每隔多少秒会发送一次心跳 // --answer eureka满足CAP中的哪两个 // --answer 3.源码解析 话不多说,直接告诉你eureka的配置类为 EurekaClientConfigBean 该类实现了EurekaClientConfig和Order接口,在EurekaClientConfig接口中定义了一些获取字段值以及区域等其他方法。可以看到该类被 @ConfigurationProperties 注解修饰,如果我们有需要自定义yml配置的,也可以使用该注解修饰。 所使用的前缀为eureka.client,该值定义在PREFIX字段中 默认地址为:

Feign 配置服务内部之间调用

梦想的初衷 提交于 2020-08-14 00:27:05
提供接口的服务为被调用方,发起Feign 请求的服务为调用方,Feign 配置在调用方,也成为 Feign client 客户端 1. 在调用方配置pom,引入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency> 2. 写一个 interface //www.1b23.com @FeignClient( "xing-user" )//服务名 public interface UserInterface { @RequestMapping(value ="/user/findByNameEn/{nameEn}" ,method = RequestMethod.GET )//必须使用RequestMapper,使用GetMapping启动报错 public User findByNameEn(@PathVariable("nameEn" ) String nameEn);//@PathVariable后面需要指定nameEn,不然可能报错 } 3. 启动类上加上注解 @EnableFeignClients(basePackages = {"org.fh.movie"})指定上面接口所在的类

微服务-各种pom的配置和注解

天涯浪子 提交于 2020-08-13 23:11:51
标准spring-boot应用 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 > < parent ><!-- 这里就是使用的spring-boot版本 --> < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-parent </ artifactId > < version > 1.3.7.RELEASE </ version > <!-- 这里就根据使用的版本来自定义 --> < relativePath /> <!-- lookup parent from repository --> </ parent > <

字节跳动Java岗4面面经分享:JVM+索引+Redis +手撕算法+CAS

我的未来我决定 提交于 2020-08-13 18:42:06
字节跳动一面: JVM的组成; 多态的实现; 内部类为何可以访问外部类对象的属性及方法; HashMap的源码Redis dictht源码分析、存放数据时发现正在扩容会怎么样: 如何判断SQL语句用到了哪些锁; MySQL索引的类型; Redis V.S. Memcached; MySQL主从复制的方式, CAS原理、含义、底层实现、存在的问题; 项目相关问题; 手撕算法:变形的二分查找。 字节跳动二面: B树什么时候的高度会变高; 数据库隔离级别、索引、RR隔离级别下的SQL查询结果; 多进程与多线程模式的区别; 守护进程、僵尸进程、 孤儿进程,如何创建守护进程; 一次HTTP请求涉及的网络协议及全过程; 手撕算法:系统用户在线峰值及持续时间统计。 字节跳动三面: Java存在内存溢出的现象吗,内存的分配方式、GC机制; final、finally fialize 的区别与用法; 设计模式之单例模式; Java的反射、含义、使用、底层实现; 悲观锁、乐观锁在数据库、Java中的实现; TCP拥塞控制原理; time-wait连接过多的原理如何解决; 手撕算法:子串匹配问题。 字节跳动四面: 项目介绍; 请介绍一下你了解的源码; 手撕算法:三面手撕算法变形(未能想出最优解,还是太菜了) ; 系统设计。 整体来讲,头条的面试官的水平非常高、善于引导面试者,整个面试过程十分享受

掌门教育微服务体系 Solar | 阿里巴巴 Nacos 企业级落地上篇

本小妞迷上赌 提交于 2020-08-13 15:40:41
联席作者:吴毅挺 任浩军 张彬彬 廖梦鸽 张金星 胡振建 郑重鸣谢:Nacos - 彦林,Spring Cloud Alibab - 小马哥、落夜,Nacos 社区 - 张龙(pader)、春少(chuntaojun) 前言 在高速发展的时候,公司规模越来越大,老师人数越来越多,这时候公司不能铺太多人去做运营与服务,必须提高每个人效,这就需要技术驱动。因此掌门教育转变成一家技术驱动型的公司,如果被迫成为一家靠资金驱动的公司就活不下去了。 -- 张翼(掌门教育创始人兼 CEO) 掌门教育自 2014 年正式转型在线教育以来,秉承“让教育共享智能,让学习高效快乐”的宗旨和愿景,经历云计算、大数据、人工智能、 AR / VR / MR 以及现今最火的 5G ,一直坚持用科技赋能教育。掌门教育的业务近几年得到了快速发展,特别是今年的疫情,使在线教育成为了新的风口,也给掌门教育新的机遇。 随着业务规模进一步扩大,流量进一步暴增,微服务数目进一步增长,使老的微服务体系所采用的注册中心 Eureka 不堪重负,同时 Spring Cloud 体系已经演进到第二代,第一代的 Eureka 注册中心已经不大适合现在的业务逻辑和规模,同时它目前被 Spring Cloud 官方置于维护模式,将不再向前发展。如何选择一个更为优秀和适用的注册中心,这个课题就摆在了掌门人的面前。经过对 Alibaba

类、变量、块、构造器、继承初始化顺序,终极解答。

狂风中的少年 提交于 2020-08-13 13:35:05
最近发现微信群里面有些群友在讨论类的初始化顺序,如类的静态变量、成员变量、静态代码块、非静态代码块、构造器,及继承父类时,它们的初始化顺序都是怎样的,下面我通过例子来说明这个情况,以免被人误导。 示例1:测试单类的初始化顺序 程序输出: static field static block member field non-static block constructor 可以得出以下结论: 静态变量 > 静态初始块 > 成员变量 > 非静态初始块 > 构造器 示例2:测试类继承的初始化顺序 程序输出: parent static field parent static block child static field child static block parent member field parent non-static block parent constructor child member field child non-static block child constructor 可以得出以下结论: 父类静态变量 > 父类静态初始块 > 子类静态变量 > 子类静态初始块 > 父类成员变量 > 父类非静态初始块 > 父类构造器 > 子类成员变量 > 子类非静态初始块 > 子类构造器 示例3:测试成员变量、初始块的初始化顺序 从上面两个例子可以看出

Spring Boot 2.3 新特配置文件属性跟踪

大城市里の小女人 提交于 2020-08-13 11:13:43
背景 当我们使用 spring boot 在多环境打包,配置属性在不同环境的值不同,如下: spring: profiles: active: @project.profile@ #根据maven 动态配置profile --- spring: profiles: dev demo: lengleng_dev --- spring: profiles: prd demo: lengleng_prd 或者使用 spring cloud 配置中心 (nacos/config)等 再有就是 应用配置的同一个属性,值的来源可能来自 配置文件、环境变量、启动参数 等等。 很多情况由于 如上配置的复杂性,应用在读取配置的时候,并不是我们预期的值 ,比如我们想使用是配置文件 dev 环境的值,却被环境变量的 或者其他的数据覆盖等,这些往往只有等我们运行时,输出日志才能发现错误原因。 解决方案 spring boot 2.3 Actuator 提供 /actuator/configprops 端点 (之前版本也有此端点,但是行为发生变化了 /actuator/env 保持一致 ),提供对配置文件属性跟踪功能, 方便我们在 spring boot 应用中,实时的获取配置文件实际加载值 。 如何使用 引入 actuator 依赖 <dependency> <groupId>org