自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 收藏
  • 关注

原创 手写分布式配置中心(六)整合springboot(自动刷新)

对于springboot配置自动刷新,原理也很简单,就是在启动过程中用一个BeanPostProcessor去收集需要自动刷新的字段,然后在springboot启动后开启轮询任务即可。不过需要对之前的代码再次做修改,因为springboot的配置注入@value("${}"),允许多个${}和嵌套,所以不能确定简单的确定用到了那个配置,本文为了简单就把所有的配置都认为需要动态刷新,实际用的时候可以在application.yml中配置需要动态刷新的配置id列表。代码在。

2024-03-08 17:34:15 638 1

原创 手写分布式配置中心(五)整合springboot(不自动刷新的)

Override。

2024-03-08 11:32:21 1053

原创 手写分布式配置中心(四)增加实时刷新功能(长轮询)

上一篇文章中实现了短轮询,不过短轮询的弊端也很明显,如果请求的频率较高,那么就会导致服务端压力大(并发高);如果请求的频率放低,那么客户端感知变更的及时性就会降低。所以我们来看另一种轮询方式,长轮询。长轮询就是客户端发起请求,如果服务端的数据没有发生变更,那么就hold住请求,直到服务端的数据发生了变更,或者达到了一定的时间就会返回。这样就减少了客户端和服务端不断频繁连接和传递数据的过程,并且不会消耗服务端太多资源,而且客户端感知变更的及时性也会大大提高。

2024-03-06 18:02:42 459

原创 手写分布式配置中心(三)增加实时刷新功能(短轮询)

要实现配置自动实时刷新,需要改造之前的代码。

2024-03-05 14:04:43 450

原创 手写分布式配置中心(二)实现分布式配置中心的简单版本

这一篇文章比较简单,就是一个增删改查的服务端和一个获取配置的客户端,旨在搭建一个简单的配置中心架构,代码在。

2024-03-04 15:58:38 542

原创 手写分布式配置中心(一)背景/需求

从本质上来说配置中心就是一个服务中存储了配置文件,这个配置文件的数据可以放到数据库中也可以存储到别的地方,客户端可以通过相关接口从这个服务中新增、修改、删除、获取配置文件,和获取配置的实时推送,下面我会从下面几点来一步步的揭开配置中心的神秘面纱。开源的配置中心有很多,比如,360的QConf、淘宝的DIamond、百度的Disconf、携程的Apollo、Apache Commons Configuration、Owner、Cfg4J、Spring Cloud Config等。

2024-03-04 14:09:04 334

原创 java eazyexcel 实现excel的动态多级联动下拉列表(2)使用MATCH+OFFSET函数

这样就解决了上一篇中的所有缺点。

2024-01-28 18:21:24 668

原创 java eazyexcel 实现excel的动态多级联动下拉列表(1)使用名称管理器+INDIRECT函数

总之使用名称管理器+INDIRECT函数实现的级联下拉列表,只能做一些简单的数据,如果想克服那些缺点,需要用另一种方式,请看下篇文章。选项的个数和内容的个数不限制。

2024-01-21 18:54:22 1111 2

原创 java实现局域网内视频投屏播放(五)视频搜索和投屏自动切换下一个

这次对ui做了一些调整,整体分成了5个类别分别为。

2024-01-13 18:48:22 599

原创 java实现局域网内视频投屏播放(四)投屏实现

​​​​​​​。

2023-12-13 23:01:06 1317 3

原创 java实现局域网内视频投屏播放(三)投屏原理

获取设备详细信息 至此,无论前面通过何种方式,我们都已经得到了一个重要的信息:LOCATION,向该地址发送一个简单的HTTP请求,即可得到详细的设备信息,无论是做投屏还是做基于DLNA的打印机,原理都是一样的,尤其是前面的部分,一模一样,而后面的部分也是换汤不换药,换成了打印相关的服务而已,设备描述示例如下。,其中friendlyName是设备的展示名,即给人看的名字,UDN是根据UUID生成的时间无关的设备失败码,其中包含了UUID,我们可以以此为设备id区分不同设备、处理设备的掉线和重连等。

2023-12-12 21:07:35 2221

原创 java实现局域网内视频投屏播放(二)爬虫

有的ts文件是加密的,播放的时候需要根据m3u8上的加密方式和加密的key去解密ts文件,如m3u8文件中有一行为 #EXT-X-KEY:METHOD=AES-128,URI="key.key",IV=0x864267cc19f34ec1066e016e0da856ee。可以通过查看源代码找到,只要写一个正则表达式就能取到链接,然后通过该链接获取m3u8内容和ts下载链接等内容,所以将这些公共的代码封装到一个一个抽象类中,并新增两个抽象方法,获取解析m3u8的正则模式和获取解析视频名的正则模式。

2023-12-12 17:59:36 1301

原创 java实现局域网内视频投屏播放(一)背景/需求

我们在用电视上投屏电影或者电视剧时,如果没有vip,用盗版电影网站投屏的话会有两个问题,1:他们网站没有投屏功能。2:卡!!!。还有就是不能随心所欲的设置自己先要自动播放的视频列表(如看完柯南第一集后想自动播放火影第十五集),所以为了实现投屏自由,需要这么一个功能来让电视播放局域网内的视频。

2023-12-12 11:30:40 1296

原创 springboot配置注入增强(四)使用框架实现自定义数据源和自定义属性解析

实现EnhancePropertyResolver接口,并添加到spring.factories中com.config.enhance.resolver.EnhancePropertyResolver中,多个用逗号分隔@OverridestrVal += "----自定属性解析";这样就可以了,下面看下运行结果。

2023-10-24 21:06:27 182

原创 springboot配置注入增强(三)自定义数据源/自定义解析方法

上一篇文章说过任何地方都能加入数据源,但是我们通常需要在application.yml中读取一些属性来确定怎么获取数据源,比如获取数据源的地址、账号、密码什么的,那就需要我们在加载application.yml后再进行我们数据源的加载,下面我就介绍几个常用的场景。

2023-09-19 21:20:42 409

原创 springboot配置注入增强(二)属性注入的原理

可以看出来这个类对比原始的PropertyResolver接口多一个数据源集合,springboot的配置原理简单来说就是将不同来源的配置组装成不同数据源类型的数据源对象,然后放到MutablePropertySources中根据名称和数据源对象进行key-value存储,使用的时候遍历MutablePropertySources中所有的数据源的value,从中找到第一个符合条件的值,找到之后再进行解析,比如${xxxx}这种。否则就会用Environment作为数据源。

2023-09-17 16:14:53 476

原创 springboot配置注入增强(一)背景/需求

如配置文件中只配置了一个用户的id,启动时根据这个id去获取用户信息,并把获取到的信息添加到springboot的配置中,也就是定制我们自己获取属性的方式。这样启动后就能直接用到这个id对应的用户姓名、性别等数据(不可变的数据,可变的数据就涉及到配置动态刷新了,后面再讲),无需再手动调用接口获取。

2023-09-10 22:47:51 544

原创 统一处理不同类型的枚举类

【代码】统一处理不同类型的枚举类。

2023-03-17 15:52:40 273

原创 十大排序算法

1 冒泡排序1.1 算法描述比较相邻的元素。如果第二个比第一个小,就交换它们两个; 对每一对相邻元素作同样的工作,从最后一个到当前批次的开始下标i,这样在最上面元素会是最小的数; 针对所有的元素重复以上的步骤,除了最后一个; 下标i+1,重复步骤1~3,直到排序完成1.2 算法分析1.2.1 时间复杂度平均:O(n2) 最优:O(n)已经排好序 最坏:O(n2)1.2.2 空间复杂度 O(1)1.2.3 稳定性 稳定1.3 算法实现/** ...

2021-07-17 22:38:02 163 1

原创 Java Nio(六)Java Nio实现高性能HTTP/HTTPS客户端

由以前的文章得知,http本质上是TCP连接,然后发送http约定的字节。我们知道系统用一个4四元组来唯一标识一个TCP连接:{local ip, local port,remote ip,remote port}

2021-06-21 18:39:54 847

原创 Java Nio(五)Java Nio实现HTTPS请求

HTTPS要比HTTP处理起来麻烦的多,涉及到握手和加解密,下面我会一一介绍。

2021-05-21 11:29:00 754 1

原创 Java Nio(四)Java Nio实现HTTP请求

HTTP相比于HTTPS来说要简单的多,完整代码在github上https://github.com/cxsummer/net-nio,我先说原理。在文章开始我先抛出一个问题。HTTP的GET和POS请求方法区别在哪呢?答案是除了名字没区别。因为我们是按照HTTP规范来发送的数据,而HTTP 规范并未规定说 GET 就不能发送 body 数据,GET也能在报文体负载数据,只看服务器那边是不是给解析body并暴露出来罢了,如果服务器解析来GET报文体的内容,那么GET跟POST有什么区别呢,换句话..

2021-05-18 18:10:39 2637 2

原创 Java Nio(三)Java Nio介绍

标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。java nio主要支持如下的channel,涵盖了Tcp,Udp 和文件IO。FileChannel DatagramChannel SocketChannel ServerSocketChannelChannelChannel用于在字节缓冲区和位于通道另一侧的实体(通常是一个文件或套接字)之间有效地传输数据。通道是访问I

2021-05-17 17:47:35 258

原创 Java Nio(二)IO模型

五种主要的IO模型阻塞式I/O 非阻塞式I/O I/O复用(Epoll、select都是一种I/O复用机制) 信息驱动式I/O 异步I/OJava IO读写原理无论是Socket的读写还是文件的读写,在Java层面的应用开发或者是linux系统底层开发,都属于输入input和输出output的处理,简称为IO读写。在原理上和处理流程上,都是一致的。区别在于参数的不同。用户程序进行IO的读写,基本上会用到read&write两大系统调用。可能不同操作系统,名称不完全一样,但是功能

2021-05-14 18:17:22 253 3

原创 Java Nio(一)前言

JAVA NIO从精通到入门到放弃再到颈椎病如何治疗

2021-05-14 17:05:55 207 2

原创 Unexpected end of file from server

发送请求的时候在请求头上加上cookie就可以了,cookie可以用浏览器打开看network

2019-10-06 19:25:01 3546

原创 为什么1个字节的取值范围是-128~127

计算机,用补码的方式,保持数据。正数的补码就是本身。负数的补码是除符号位之外,取反,再加1.1个字节,取值范围是-128~127.那么,为什么是-128~127呢?因为计算机补码机制,计算机中的数值是按照补码来存储的,正数的补码是他自身,负数的补码是符号位以外取反+1.所以,正数的最大补码:01111111,即127.负数的最大补码10000000,原码为100000000,即...

2019-08-15 09:24:55 5402 11

转载 java AQS框架

概述AbstractQueuedSynchronizer,即队列同步器。它是构建锁或者其他同步组件的基础框架(如ReentrantLock、ReentrantReadWriteLock、Semaphore等),JUC并发包的作者(Doug Lea)期望它能够成为实现大部分同步需求的基础。它是JUC并发包中的核心基础组件。设计AQS的基本设计思想并不复杂:获取锁:while (s...

2019-06-14 09:08:47 186

转载 Guava RateLimiter限流原理解析

限流是保护高并发系统的三把利器之一,另外两个是缓存和降级。限流在很多场景中用来限制并发和请求量,比如说秒杀抢购,保护自身系统和下游系统不被巨型流量冲垮等。限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务或进行流量整形。常用的限流方式和场景有:限制总并发数(比如数据库连接池、线程池)、限制瞬时并发数(如nginx的limit...

2019-06-13 19:59:51 242

转载 深入剖析ThreadLocal

status = txManager.getTransaction(new DefaultTransactionDefinition()); // 获得事务状态 对于这一行代码是不是会些疑问,为什么这样就开启事务了,为什么在接下来的sqlMap做数据库的操作时没用到这个status,还能完成事务的统一?众所周知要想事务一致,那么开启事务con.setAuto...

2019-06-11 16:49:28 123

原创 SpringCloud框架搭建(十) 断路器聚合监控

看单个的Hystrix Dashboard的数据并没有什么多大的价值,要想看这个系统的Hystrix Dashboard数据就需要用到Hystrix Turbine。Hystrix Turbine将每个服务Hystrix Dashboard数据进行了整合。turbine是聚合服务器发送事件流数据的一个工具,hystrix的监控中,只能监控单个节点,实际生产中都为集群,因此可以通过 turbin...

2019-06-10 18:57:55 172

原创 SpringCloud框架搭建(九) 断路器监控

Hystrix Dashboard,它主要用来实时监控Hystrix的各项指标信息。通过Hystrix Dashboard反馈的实时信息,可以帮助我们快速发现系统中存在的问题。Hystrix Dashboard是作为断路器状态的一个组件,提供了数据监控和友好的图形化界面。首先在eureka-user添加maven依赖:<dependency> <groupId&...

2019-06-10 18:40:02 151

原创 SpringCloud框架搭建(八)服务链路追踪

随着分布式服务架构的流行,特别是微服务等设计理念在系统中的应用,业务的调用链越来越复杂。随着业务的发展,系统规模也会变得越来越大,各微服务间的调用关系也变得越来越复杂。通常一个由客户端发起的请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果,在复杂的微服务架构系统中,几乎每一个前端请求都会形成一个复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟过高或者错误都有可能引起...

2019-06-10 18:18:18 412

原创 SpringCloud框架搭建(七)路由网关

当外部的应用如何来访问内部各种各样的微服务时,当然可以直接用ip端口加服务来进行访问,但是这样就不能实现负载均衡。当然我们可以将外部应用也加入到eureka中,这样也就可以通过eureka实现负载均衡。但是实际情况下我们不能将所有的请求端都加入eureka中(千万级访问量我们不可能将千万个客户端都加进来),在微服务架构中,后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由...

2019-06-10 16:47:56 144

原创 SpringCloud框架搭建(六)消息总线

书接上文,虽然可以通过刷新端点来刷新配置,但是如果有几百个服务的话,一个一个手动刷新,同样会累死人的。所以我们可以使用rabbitMq来广播配置文件的更改。以让所有的服务都刷新配置。架构图:1、提交代码触发post给客户端A-3发送bus-refresh 2、客户端A-3接收到请求从Server端更新配置并且发送给Spring Cloud Bus 3、Spring Cloud bu...

2019-06-10 15:53:33 187

原创 SpringCloud框架搭建(五)分布式配置中心

一个微服务系统是由多个微服务组成,这些微服务通常会有很多相同的配置(即application.yml),由于服务众多,如果对于一项公共配置发生变更,比如数据库的地址。那么就需要将所有设计到的服务全部更新,并且重启以重新读取配置文件。这如果对于几百个服务构成的系统来说,就要了人命了。所以针对微服务要实现集中管理微服务配置、不同环境不同配置、运行期间也可动态调整、配置修改后可以自动更新的需求,分布式配...

2019-06-10 14:56:08 145

原创 SpringCloud框架搭建(四)断路器

在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元间通过服务注册与订阅的方式互相依赖。由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身问题出现调用故障或延迟,而这些问题会直接导致调用方的对外服务也出现延迟,若此时调用方的请求不断增加,最后就会出现因等待出现故障的依赖方响应而形成任务积压,最终导致自身服务的瘫痪。除了可能导致自身服务的...

2019-06-10 11:30:42 218

原创 SpringCloud框架搭建(三)服务消费ribbon和feign

RibbonRibbon 是一个基于 HTTP 和 TCP 客户端的负载均衡器,它可以在客户端配置 ribbonServerList(服务端列表),然后轮询请求以实现均衡负载,它在联合 Eureka 使用时ribbonServerList 会被 DiscoveryEnabledNIWSServerList 重写,扩展成从 Eureka 注册中心获取服务端列表 同时它也会用 NIWSDiscov...

2019-06-10 08:55:10 249

原创 SpringCloud框架搭建(二)Eureka服务治理体系

服务治理是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现。体系如下:Spirng Cloud Eureka使用Netflix Eureka来实现服务注册与发现。它既包含了服务端组件,也包含了客户端组件,并且服务端与客户端均采用java编写,所以Eureka主要适用于通过java实现的分布式系统,或是JVM兼容语言构建的系统。Eureka的服务端提供了较...

2019-06-08 23:04:51 598

原创 SpringCloud框架搭建(一)版本控制

对于SpringCloud的版本可查看https://blog.csdn.net/54powerman/article/details/79163440我们的SpringCloud框架使用的版本为Finchley.RELEASE,Finchley版本的官方文档如下:http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/singl...

2019-06-08 21:51:57 1622

空空如也

空空如也

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

TA关注的人

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