自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

旭出东方

这事有意义

  • 博客(37)
  • 收藏
  • 关注

原创 Java微服务架构文章整理(持续更新)

并发编程每秒上千订单场景下的分布式锁高并发优化实践!互联网大厂Java面试题:使用无界队列的线程池会导致内存飙升吗?volatile到底是什么?Java 8如何优化CAS性能?谈谈你对AQS的理解?微服务【双11狂欢的背后】微服务注册中心如何承载大型系统的千万级访问?...

2020-01-09 15:21:06 320

转载 APT你真的了解吗?解析Javac源码APT执行原理

APT你真的了解吗?解析Javac源码APT执行原理

2022-02-08 18:37:23 420

转载 springboot + aop + Lua分布式限流的最佳实践

一、什么是限流?为什么要限流?不知道大家有没有做过帝都的地铁,就是进地铁站都要排队的那种,为什么要这样摆长龙转圈圈?答案就是为了限流!因为一趟地铁的运力是有限的,一下挤进去太多人会造成站台的拥挤、列车的超载,存在一定的安全隐患。同理,我们的程序也是一样,它处理请求的能力也是有限的,一旦请求多到超出它的处理极限就会崩溃。为了不出现最坏的崩溃情况,只能耽误一下大家进站的时间。限流是保证系统高可用的重要手段!!!由于互联网公司的流量巨大,系统上线会做一个流量峰值的评估,尤其是像各种秒杀促销活动,为了保证系

2021-07-19 11:29:29 285

原创 Hystrix(二)情景应用篇

本文章转自:亿级流量电商详情页系统的大型高并发与高可用缓存架构实战 课程笔记高并发访问耗尽缓存服务资源的场景分析基于hystrix的线程池隔离技术进行商品服务接口的资源隔离pom.xml<dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-core</artifactId> <version>1.5.12&lt

2021-07-07 14:16:55 241

原创 Feign负载均衡

概述Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡Feign能干什么Feign旨在使编写Java Http客户端变得更

2021-07-05 15:25:23 358

原创 Ribbon负载均衡

概述Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义

2021-07-05 11:01:22 102

转载 SpringBoot中的SmartInitializingSingleton接口及其使用

转载:SpringBoot中的SmartInitializingSingleton接口及其使用一、使用场景实现SmartInitializingSingleton的接口后,当所有单例 bean 都初始化完成以后, Spring的IOC容器会回调该接口的 afterSingletonsInstantiated()方法。主要应用场合就是在所有单例 bean 创建完成之后,可以在该回调中做一些事情,例如:import org.springframework.beans.factory.ListableBe

2021-07-02 10:46:38 347

原创 设计模式-装饰者模式-代理模式

装饰者模式什么是装饰者模式:动态地给一些对象添加一些额外的功能。就增加功能来说装饰者模式比生成子类更加灵活。装饰者模式是一种对象结构型模式。装饰者模式的优缺点:装饰者模式与 类继承都是实现功能的扩展,但是装饰者模式比类继承有更多的灵活性。装饰者模式可以使用具体装饰类的排列组合,这样一来可以很轻易得到不同对象的行为。由于装饰者模式比类继承更加灵活,这样就意味着装饰者模式比类继承更加容易出错。装饰者模式的应用举例:当我们需要为某个对象动态地增加属性和方法时,可以考虑使用装饰者模式。当对象

2021-05-05 13:57:08 109

原创 JUC-Future

在Java中,创建线程一般有两种方式,一种是继承Thread类,一种是实现Runnable接口。然而,这两种方式的缺点是在线程任务执行结束后,无法获取执行结果。我们一般只能采用共享变量或共享存储区以及线程间通信的方式实现获得任务结果的目的。不过,Java中,也提供了使用Callable和Future来实现获取任务结果的操作。Callable用来执行任务,产生结果,而Future用来获得结果。Callable接口与Runnable接口是否相似,查看源码,可知Callable接口的定义如下:@Functi

2021-05-05 12:32:29 107

原创 JUC-CountDownLatch & CyclicBarrier

经常用于监听某些初始化操作,等初始化执行完毕后,通知主线程继续工作。public class UseCountDownLatch { public static void main(String[] args) { final CountDownLatch countDown = new CountDownLatch(2); Thread t1 = new Thread(new Runnable() { @Override public void run

2021-05-04 21:07:35 99

原创 JUC并发包-线程池

为了更好的控制多线程,JDK提供了一套线程框架Executor,帮助开发人员有效的进行线程控制。它们都在java.util.concurrent包中,是JDK并发包的核心。其中有一个比较重要的类:Executors,他扮演这线程工厂的角色,我们通过Executors可以创建特定功能的线程池。什么是线程池Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。降低资源消耗。通过重复利用已创建的线程降低线程创建和

2021-05-04 21:04:43 118

原创 并发Queue

在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自QueueConcurrentLinkedQueueConcurrentLinkedQueue:是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能,通常ConcurrentLinkedQueue性能好于BlockingQueue。它是一个基于链接点的 无界线程安全队列 。该队列的元素遵循先进先出的原则。头

2021-05-04 16:39:04 177 1

转载 使用@AutoConfigureBefore、After、Order调整Spring Boot自动配置顺序

转自:使用@AutoConfigureBefore调整配置顺序竟没生效?前言Spring Boot是Spring家族具有划时代意义的一款产品,它发展自Spring Framework却又高于它,这种高于主要表现在其最重要的三大特性,而相较于这三大特性中更为重要的便是Spring Boot的自动配置(AutoConfiguration)。与其说是自动,倒不如说是“智能”,该框架看起来好像“更聪明”了。因此它也顺理成章的成为了构建微服务的基础设施,稳坐第一宝座。生活之道,在于取舍。编程何尝不是,任何决定都

2021-04-21 18:35:54 286

转载 spring-boot-configuration-processor 是干啥用的

转自:卡梅丽多 >> spring-boot-configuration-processor 是干啥用的spring默认使用yml中的配置,但有时候要用传统的xml或properties配置,就需要使用spring-boot-configuration-processor了引入pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&gt

2021-04-21 09:21:43 621

转载 组件化之AutoService使用与源码解析

转自:组件化之AutoService使用与源码解析在JDK 1.5之后,java提供了对注解的支持,这些注解与普通代码一样,在运行期间发挥作用。在JDK 1.6中实现了JSR-269规范,提供了一组插入式注解处理器的标准API在编译期间对注解进行处理,可以看作是一组编译器的插件,可以读取/修改/添加抽象语法树中的任意元素。在Android模块开发之APT技术介绍了自定义注解处理器的一些知识,自定义注解处理器注册才能被Java虚拟机调用,在上面的博客第四小节中用的方法是手动注册,这比较违反程序员懒的特点,

2021-04-20 10:32:59 740

转载 注解处理器(编译期|RetentionPolicy.SOURCE)

注解的处理除了可以在运行时通过反射机制处理外,还可以在编译期进行处理。在编译期处理注解时,会处理到不再产生新的源文件为止,之后再对所有源文件进行编译。Java5中提供了apt工具来进行编译期的注解处理。apt是命令行工具,与之配套的是一套描述“程序在编译时刻的静态结构”的API:Mirror API(com.sun.mirror.*)。通过Mirror API可以获取到被注解的Java类型元素的信息,从而提供自定义的处理逻辑。具体的处理工具交给apt来处理。编写注解处理器的核心是两个类:注解处理器(com

2021-04-19 10:38:45 554

原创 分布式解决方案之任务调度

Java实现定时任务方式Threadpublic class Demo01 { static long count = 0; public static void main(String[] args) { Runnable runnable = new Runnable() { @Override public void run() { while (true) { try {

2021-02-03 14:54:21 460

原创 Maven私服作用

一些无法从外部仓库下载的构件,例如内部的项目还能部署到私服上,以便供其他依赖项目使用。为了节省带宽和时间,在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。当本地Maven项目需要下载构件时,先去私服请求,如果私服没有,则再去远程仓库请求,从远程仓库下载构件后,把构件缓存在私服上。这样,及时暂时没有Internet链接,由于私服已经缓存了大量构件,整个项目还是可以正常使用的。同时,也降低了中央仓库的负荷。什么场景用Maven私服?在实际开发中,项目中可能会用到第三方的jar、内部通讯的

2021-02-02 11:49:46 341

转载 注解@EnableAspectJAutoProxy(exposeProxy = true) exposeProxy 的用法

假设一个接口里面有两个方法:package demo.long;public interface CustomerService { public void doSomething1(); public void doSomething2(); } 接口实现类如下:package demo.long.impl;import demo.long.CustomerService; @Servicepublic class CustomerServiceImpl

2020-12-31 16:43:51 12739 1

转载 什么是CAS(乐观锁)

本文讲解CAS机制,主要是因为最近准备面试题,发现这个问题在面试中出现的频率非常的高,因此把自己学习过程中的一些理解记录下来,希望能对大家也有帮助。什么是悲观锁、乐观锁?在java语言里,总有一些名词看语义跟本不明白是啥玩意儿,也就总有部分面试官拿着这样的词来忽悠面试者,以此来找优越感,其实理解清楚了,这些词也就唬不住人了。synchronized是悲观锁,这种线程一旦得到锁,其他需要锁的线程就挂起的情况就是悲观锁。CAS操作的就是乐观锁,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就

2020-12-29 10:07:15 6370 2

原创 Swagger2 API接口管理

随着微服务架构体系的发展和应用, 为了前后端能够更好的集成与对接,同时为了项目的方便交付,每个项目都需要提供相应的API文档。来源:PC端、微信端、H5端、移动端(安卓和IOS端)对API文档进行更新的时候,需要通知前端开发人员,导致文档更新交流不及时;API接口返回信息不明确大公司中肯定会有专门文档服务器对接口文档进行更新。缺乏在线接口测试,通常需要使用相应的API测试工具,比如postman、SoapUI等接口文档太多,不便于管理为了解决传统API接口文档维护的问题,为了方便进行测试后台R

2020-12-23 11:38:47 235

原创 spring扩展

BeanDefinitionRegistryPostProcessor这个类需要与@Import和@Configuration共同配合使用。一般来说@Import可以导入三种bean普通的bean classImportSelector 这个类可以通过自定义一些条件来控制classpath中需要导入的classImportBeanDefinitionRegistrar这个类可以通过代码来动态加载bean,这些bean可以是普通的定义好的class也可以是动态代理。通过查看代码我们可以知道.

2020-12-23 11:08:42 265

转载 关于SaaS平台中应对多租户模式的设计

这几年,在公司尝试转型做产品。所以引入了很多的产品的理念。不管是对产品的定义,还是针对产品的管理,以及摸索产品的落地等等。我之前更多的是接触的ToB端,所以想必也猜到了是一个SaaS模式的产品。其实,现在回想并总结,之前所做的产品并不理想。当然,在这里就不多的来介绍了。在一个月前不久,我给了一个朋友一份代码,还包含对产品的技术框架以及规划的文档。补充说一下,我很庆幸在一个新的环境接手在重新设计产品。所以基于之前的沉淀,有了一定的提升。那么这个朋友也是我之前在一次技术交流会上分享技术的时候所认识的。这次呢,

2020-12-22 14:52:28 971 1

原创 Spring AOP

什么是AOP编程AOP: Aspect Oriented Programming 面向切面编程。  面向切面编程(也叫面向方面):Aspect Oriented Programming(AOP),是目前软件开发中的一个热点。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。  AOP是OOP的延续,是(Aspect Oriented Programming)的缩写,意思是面向切面(方面)编程。  主要的功能是:日志记录,性能

2020-12-22 11:28:15 114

转载 spring自动装配

@Autowired&@Qualifier&@Primary自动装配;Spring利用依赖注入(DI),完成对IOC容器中中各个组件的依赖关系赋值;1)、@Autowired:自动注入默认优先按照类型去容器中找对应的组件:applicationContext.getBean(BookDao.class);找到就赋值如果找到多个相同类型的组件,再将属性的名称作为组件的id去容器中查找 applicationContext.getBean(“bookDao”)@Qualifier(

2020-12-22 09:52:45 102

转载 spring属性赋值

@Value赋值public class Person { //使用@Value赋值; //1、基本数值 //2、可以写SpEL; #{} //3、可以写${};取出配置文件【properties】中的值(在运行环境变量里面的值) @Value("张三") private String name; @Value("#{20-2}") private Integer age; }@Configurationpublic class MainConfi

2020-12-22 09:31:25 74

转载 spring bean 生命周期

@Bean指定初始化和销毁方法@Componentpublic class Car { public Car(){ System.out.println("car constructor..."); } public void init(){ System.out.println("car ... init..."); } public void detory(){ System.out.println("car ... detory..."

2020-12-21 14:15:57 90

转载 Spring组件注册

@Configuration&@Bean给容器中注册组件XML方式public class Person { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { re

2020-12-21 11:45:06 73

转载 SpringBoot 用 @ControllerAdvice 和 BasicErrorController 处理异常并返回结构一致的 JSON

SpringBoot 用 @ControllerAdvice 和 BasicErrorController 处理异常并返回结构一致的 JSON

2020-12-18 15:53:17 422 2

转载 微服务通过feign.RequestInterceptor传递参数

Feign 支持请求拦截器,在发送请求前,可以对发送的模板进行操作,例如设置请求头等属性,自定请求拦截器需要实现 feign.RequestInterceptor 接口,该接口的方法 apply 有参数 template ,该参数类型为 RequestTemplate,我们可以根据实际情况对请求信息进行调整,示例如下:创建自定义请求拦截器,在发送请求前增加了一个请求头信息,进行身份校验。具体代码参考如下:import feign.RequestInterceptor;import feign.R

2020-12-17 14:23:37 735

转载 使用Hystrix的插件机制,解决在使用线程隔离时,threadlocal的传递问题

背景在我们的项目中,比较广泛地使用了ThreadLocal,比如,在filter层,根据token,取到用户信息后,就会放到一个ThreadLocal变量中;在后续的业务处理中,就会直接从当前线程,来获取该ThreadLocal变量,然后获取到其中的用户信息,非常的方便。但是,hystrix 这个组件一旦引入的话,如果使用线程隔离的方式,我们的业务逻辑就被分成了两部分,如下:public class SimpleHystrixCommand extends HystrixCommand<Stri

2020-12-17 09:39:59 237

原创 Hystrix(一)

本文章转自:亿级流量电商详情页系统的大型高并发与高可用缓存架构实战 课程笔记Hystrix是什么在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有的时候某些依赖服务出现故障也是很正常的。Hystrix可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。Hystrix通过将依赖服务进行资源隔离,进而组织某个依赖服务出现故障的时候,避免这种故障在整个系统所有的依赖服务调用中进行蔓延,同时Hystrix还提供故障时的fallback降级机

2020-12-16 15:09:08 195

转载 分布式事务解决方案

分布式事务的实现主要有以下 5 种方案:XA 方案TCC 方案本地消息表可靠消息最终一致性方案最大努力通知方案两阶段提交方案/XA方案所谓的 XA 方案,即:两阶段提交,有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问问各个数据库你准备好了吗?如果每个数据库都回复 ok,那么就正式提交事务,在各个数据库上执行操作;如果任何其中一个数据库回答不 ok,...

2020-01-15 14:39:25 133

原创 OpenResty部署ngx_lua_waf

OpenResty部署ngx_lua_wafOpenResty部署安装依赖包下载并编译安装openresty测试openresty安装启动WAF部署配置文件详细说明检查规则是否生效OpenResty部署安装依赖包yum install -y readline-devel pcre-devel openssl-develcd /usr/local/src下载并编译安装openresty...

2019-06-14 11:20:04 1272

原创 Rancher 2.X-RKE-七层负载均衡HA部署(不推荐)

Rancher 2.X-RKE-七层负载均衡HA部署基础环境配置版本要求准备四个节点CentOS关闭selinux关闭防火墙(可选)或者放行相应端口Kernel性能调优Docker安装与配置Docker配置节点配置自签名ssl证书HTTP over SSL生成自签名证书创建四层负载均衡(172.18.85.207节点)创建Nginx配置运行NGINX安装kubectl七层负载均衡HA部署架构说明下...

2019-04-10 12:12:47 2035

原创 Java中Comparable和Comparator的使用方法

Java中Comparable和Comparator的使用方法Java中Comparable和Comparator的使用方法内置引用类型的比较Comparable用法Comparator用法使用Collections对容器的比较自定义数据排序ComparableComparator内置引用类型的比较Comparable用法这些类会继承Comparable接口,实现compareTo方法

2017-03-16 15:30:26 1367 1

转载 Android——文件路径(/mnt/sdcard/...)、Uri(content://media/external/...)学习

Android——文件路径(/mnt/sdcard/…)、Uri(content://media/external/…)学习一、URI通用资源标志符(Universal Resource Identifier, 简称”URI”)。  Uri代表要操作的数据,Android上可用的每种资源 - 图像、视频片段等都可以用Uri来表示。  URI一般由三部分组成:    访问资源的命名机制。     存

2016-05-10 09:42:23 2683

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除