自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

技术随笔

相当于自己的一个项目解决方案备忘录吧

  • 博客(97)
  • 资源 (9)
  • 收藏
  • 关注

原创 【nacos】加载配置文件顺序解析

即如果我的共享配置指定为application.yml扩展配置为redis.yml,application.name是app1,active是dev的话加载顺序如下这里注意优先级,优先级是跟加载顺序相反,即application.name+active+file-extension的优先级最高。

2023-10-10 15:27:27 1704

原创 centos安装elasticsearch7.9

如果有旧版本的数据的话可以将旧版本的数据直接cp到data目录下就好,但是需要注意版本,具体可以访问http://es服务器ip:9200。这里需要注意一点,需要根据你服务器的内核来进行选择,如下图所示,我就应该选择aarch64版本的,否则运行的时候会报错cannot execute binary file: Exec format error。elasticsearch需要非root用户运行,所以需要添加用户并修改elastielcsearch-7.9.3的所有者,命令如下。

2023-08-17 16:10:20 1131

原创 TDengine + Telegraf + Grafana 实现图形化服务器状态监控

Telegraf 是一个开源的指标收集代理,用于从各种数据源收集、处理和传输指标数据。它是由InfluxData(现在称为InfluxDB)开发的一款工具,旨在帮助用户轻松地收集系统、应用程序和服务的性能指标数据,并将其发送到不同的目标数据存储、监控系统或时间序列数据库中,以便后续的分析和可视化。只有当安装第二个或以后更多的节点时,才需要输入已有集群中任何一个可用节点的 FQDN,支持该新节点加入集群。Grafana 是一个开源的数据可视化和监控平台,用于创建、查看和分享各种数据源的实时图表和仪表盘。

2023-08-08 15:32:24 827

原创 ffmpeg+nginx实现rtsp协议摄像头web端播放

http://nginx服务器IP:配置代理的端口(server中定义的)/location定义的代理地址/ffmpeg中自定义的流的名称.m3u8。如果你使用的是海康威视得摄像头构成一般为rtsp://摄像头用户名:密码@摄像头IP:摄像头端口/Streaming/Channels/摄像头标识。这些资源已经上传需要的可以自己下载,这个压缩包里的nginx已经安装好所需模块,解压即可使用。VLC->媒体->打开媒体串流。

2023-08-07 15:29:22 2296 2

原创 从零开始搭建属于自己的物联网平台(四)实现基于协议包的动态协议解析

一个协议包可能有多个DeviceMessageCodec(根据协议包解析的网络协议来的,比如需要解析TCP、MQTT两种那就添加两个DeviceMessageCodec),每个DeviceMessageCodec都实现了上行消息解析、下行消息解析两个功能。针对这一场景,以加载jar包的形式来实现,指定标准的接口,只要在jar包中实现对应的接口,做标准的协议解析方法就可以了(这里要注意,要支持设备上下行消息解析)。定义协议解析包对象应具有的功能。

2023-07-24 17:18:46 596

原创 【DataX】实现数据从postgresql迁移至tdenginue

这里需要注意一点,alibaba/datax 这个仓库里面只有td2.0的writer,要写入td3.0的话需要去taosdata/datax这个仓库里拉代码再编译tdengine30writer,放入到datax plugin目录下。执行DataX需要java 1.8,以及python环境,python支持2.0和3.0,我这里使用的是python3.6。python datax.py 编写的job文件.json。编写job文件,后缀为json。

2023-07-20 15:04:58 374

原创 【jar包加密】基于字节码的jar包加密

使用开源的基于字节码的jar包混淆加密工具class-winter项目地址参数是否必填说明示例是指定要加密的jar/war文件注:当使用maven插件进行自动加密时,此参数非必填,不填则自动获取。注:当使用maven插件进行自动加密时,可结合maven相关占位符进行相对定位。如:${project.basedir}/../../your-project.jar是通过前缀匹配的形式定位要加密的class注:多个通过逗号分割。cca(依托于includePrefix)否。

2023-07-06 10:46:13 795

原创 【ElasticSearch】ElasticSearch的倒排索引

ElasticSearch是一个基于Apache Lucene构建的开源搜索引擎,它提供了强大的全文搜索和分析功能。它不仅可以快速搜索和检索大量的结构化和非结构化数据,还具备水平扩展和高可用性的特性。

2023-06-25 17:17:27 3385

原创 SpringBoot上传文件异常 org.springframework.web.multipart.MultipartException

Failedtoparsemultipartservletrequest;nestedexceptionisjava.io.IOException:Thetemporaryuploadlocation[/tmp/tomcat.118932910164342315.9180/work/Tomcat/localhost/ROOT]isnotvalid

2023-06-16 17:00:11 1453

原创 从零开始搭建属于自己的物联网平台(三)基于netty实现mqtt server网关

定义网关接口,规定网关需要实现的方法。/*** 设备网关/*** @return 网关ID/*** @return 网关端口/*** @return 支持的传输协议/*** 启动网关* @return 启动结果/*** 关闭网关* @return 关闭结果/*** 网关状态* @return 网关状态。

2023-06-14 09:24:58 3738 4

原创 基于redis实现秒杀并防止超卖

大家可以想一下上边实现方式对于多个库存的商品是否适用,其实答案很简单,是不太适用的,针对多个库存的商品,不能使用类似于分布式锁的方式,因为该种方式同时只能由一个用户争抢到资源,只有等找个用户完成了下单动作释放掉锁之后其他用户才可以继续进行,所以秒杀效率特别底下。因为所有redis的操作(这里指的是key的操作,像备份落盘之类的另算)都是单线程的,所以是线程安全的,但是有一点需要注意,这里线程安全仅仅指的是单个操作,如果有连续性的操作,需要使用lua脚本来保证原子性。仅有100个用户抢到了资源。

2023-06-08 10:58:43 2834

原创 深入了解Java中的List集合

Java中的List集合是一种常用的数据结构,它提供了一种有序、可重复的元素集合。在开发中,我们经常需要使用List来存储和操作一组数据。本文将深入介绍Java中List集合的特性、常见的操作方法以及一些使用技巧,帮助读者更好地理解和应用List集合。

2023-06-01 14:45:36 2622

原创 从零开始搭建属于自己的物联网平台(二)实现基于订阅发布的消息总线

这里使用@ConditionalOnProperty来修饰该实现类,这样目的是让redis stream作为消息总线的默认实现,如果后续添加别的实现,可以在配置文件中便利的配置。这里生产者处理逻辑比较简单,当设备消息或者其他业务的消息产生的时候,调用生产者实现的发布方法将消息推送至消息总线。EventBus实体,主要负责三个功能,发布、订阅的入口,以及管理维护MessageAdapter。首先,像这种平台的功能,一定要做好抽象设计,预留好功能扩展的接口。订阅者组内多播处理抽象类。

2023-05-29 10:54:18 1595 5

原创 响应式背压处理物联网高并发下设备消息写入

传统的 BIO,是线程将数据写入 Connection 之后,当前线程进入 Block 状态,直到响应返回,之后接着做响应返回后的动作。NIO 则是线程将数据写入 Connection 之后,将响应返回后需要做的事情以及参数缓存到一个地方之后,直接返回。在有响应返回后,NIO 的 Selector 的 Read 事件会是 Ready 状态,扫描 Selector 事件的线程,会告诉你的线程池数据好了,然后线程池中的某个线程,拿出刚刚缓存的要做的事情还有参数,继续处理。

2023-05-24 18:10:02 238

原创 从零开始搭建属于自己的物联网平台(一)需求分析以及架构设计

针对消息体我们应该支持自由的解析方式,这里我打算采用自定义解析jar的方式,针对每一个新的设备,开发出不同的解析jar然后上传到服务器上,消息到来之后我们调用对应的jar来解析消息。采用spring loud全家桶(使用若依微服务版,若依就挺好的这一块就不重复造轮子了),各个服务之间的调用摒弃掉feign调用的方式,针对物联网项目的特点,准备采用发布订阅模式,将各个业务转化为一个个不同的流或者说是时间,流的起点以及终点分别的设备消息的到来与入库,其他上层业务订阅这些不同的流来达成扩展。

2023-05-24 15:58:45 2210

原创 如何创造一个属于自己的springboot stater

stater是一种特殊的spring boot 工程,它实现了一些共同性的功能,使你可以依赖过来直接使用,又在配置上做出了一些默认的约定,是你不需要进行复杂的配置。

2023-05-22 14:22:56 696

原创 Springboot实现热加载其他spring boot 服务

想要实现热加载,一定得了解在spring中类的加载机制,大体上spring在扫描到@Component注解的类时,会根据其class生成对应的BeanDefinition,然后在将其注册在BeanDefinitionRegistry(这是个接口,最终由DefaultListableBeanFactory实现)。想要设计一个stater,可以方便加载一个可以完整运行的springboot单体jar包,为了在已执行的服务上面快速的扩展功能而不需要重启整个服务,又或者低代码平台生成代码之后可以快速预览。

2023-05-17 15:18:33 1728 2

原创 URLClassLoader中出现的can not cast to异常

在使用URLClassLoader进行远程类加载的时候,有时候强转的时候发现明明使用的是同一个类,也会报强转失败,类似于com.abc.demo.ClassA can not cast to com.abc.demo.ClassA。

2022-10-08 16:36:40 638

原创 Netty参数设定推荐

netty一些参数的设定推荐及原因

2022-09-23 09:04:43 1644

原创 SpringBoot源码解析-事件驱动注解@EventListener

SpringBoot源码解析,事件驱动注解@EventListenr

2022-08-15 11:04:26 488

原创 【西门子】JAVA链接S7-1200,S7-1500上下行数据处理

S7-1200,S7-1500上下行数据处理仿真环境安装TIA Portal解压缩NetToPLCsimJAVA链接S7工具类功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入仿真环境首先用到的软件有以下几个STEP 7 Ba

2022-05-27 15:10:54 4861 17

原创 关于MySQL、redis双写一致性的思考

双写一致性的思考首先先说结论思考的问题针对问题的讨论先更新缓存,再操作数据库先操作数据库,再更新缓存先删除缓存,再操作数据库先操作数据库,再删除缓存提供一个方案首先先说结论我认为没有办法来保证MySQL、redis的双写强一致性。最终下边文章讨论的只是双写的最终一致性。思考的问题应该先操作数据库,还是先操作缓存?操作缓存时是应该删除还是更新?针对问题的讨论其实针对上面的两个问题,可以分成四种情况先更新缓存,再操作数据库先删除缓存,再操作数据库先操作数据库,再更新缓存先操作数据库,

2022-04-21 18:23:25 708

原创 Redis(二)内存中的存储细节

学习不是为了学习而学习,本文主要介绍redis各个数据结构存储的细节,以及针对这样的存储细节进行内存的优化。

2021-08-03 12:00:13 196

原创 Redis(一)Redis的内存统计与划分

Redis内存如何统计Redis内存used_memoryused_memory_rssmem_fragmentation_ratiomem_allocatorRedis内存划分数据进程内存缓冲内存内存碎片如何统计Redis内存在客户端通过redis-cli连接服务器后(redis-cli),通过info命令可以查看内存使用情况。info memoryinfo命令可以显示redis服务器的许多信息,包括服务器基本信息、CPU、内存、持久化、客户端连接信息等等;memory是参数,表示只显示内存相关

2021-08-02 16:30:24 485

原创 响应式开发初探。基于ProjectReactor的响应式服务

响应式开发初探前言响应式编程与传统BIO响应式编程DEMO引入依赖响应式的Mongodb客户端响应式Web支持完整的pom文件编写entity编写controllerFluxMono编写Repository编写service运行测试后记前言响应式编程与传统BIO传统的 BIO,是线程将数据写入 Connection 之后,当前线程进入 Block 状态,直到响应返回,之后接着做响应返回后的动作。NIO 则是线程将数据写入 Connection 之后,将响应返回后需要做的事情以及参数缓存到一个地方之后,

2021-04-16 18:08:25 176

原创 使用JMeter进行MQTT压力测试

准备工作MQTT插件JMeter本身没有MQTT的压力测试功能需要下载插件进行压力测试下载地址将下载好的mqtt-xmeter-2.0.2-jar-with-dependencies.jar放在\lib\ext下面重新启动就OK了编写脚本创建线程组(每一个线程组就是一个MQTT客户端)创建链接由于链接每个线程只用创建一次,所以需要添加逻辑控制器 - 仅一次控制器在仅一次控制器下方添加逻辑取样器 MQTTConnect填写链接相关属性在ClientId这里如果需要con

2021-03-31 14:46:35 8545 15

原创 no matching manifest for linux/arm64/v8 in the manifest list entries

no matching manifest for linux/arm64/v8 in the manifest list entriesdocker构建镜像时出现该问题的话,可能是操作系统内核版本不匹配使用上述内核版本时会报该错误。这个时候将openjdk:8跟换为arm64v8/openjdk:8就可以解决该问题了...

2021-03-24 14:04:00 8066 1

原创 JavaNio监听火狐Cookies变化

1. 火狐Cookies的位置火狐cookies默认地址为%AppData%/Roaming/Mozilla/Firefox/Profiles/随机字符串.default下面2.监听实现源码import java.io.IOException;import java.nio.file.*;/** * 监听火狐Cookies变化 * * @author: Liuhl * @date: 2020/11/16 0016 12:57 * @description: */publi

2020-11-20 10:33:45 212

原创 Nacos的Raft 算法

Nacos Discovery 集群为了保证集群中数据的一致性,其采用了 Raft 算法。这是一种通过对日志进行复制管理来达到一致性的算法。Raft 通过选举Leader 并由 Leader 节点负责管理日志复制来实现各个节点间数据的一致性。Raft 算法不是强一致性算法,是最终一致性算法。

2020-11-09 15:04:44 3619

原创 树形结构闭包表设计

树形结构闭包表设计闭包表设计闭包表设计闭包表是解决分层存储一个简单而又优雅的解决方案,它记录了表中所有的节点关系,并不仅仅是直接的父子关系。  在闭包表的设计中,额外创建了一张节点关系表(空间换取时间),它包含两列,每一列都是一个指向树形结构中主键的外键。这张表存放包括自身在内的所有的和他有关系的节点数据CREATE TABLE Comments(  CommentId int PK,  ArticleId int,  CommentBody int,  FOREIGN KEY(Articl

2020-11-05 10:58:45 2159 2

原创 【异常】expected at least 1 bean which qualifies as autowire candidate for this depende

springboot初学者经常会出现下面的问题,expected at least 1 bean which qualifies as autowire candidate for this depende2020-10-16 10:44:50.481 INFO 5404 — [ main] com.rest.app.ServletInitializer : Starting ServletInitializer v0.0.1-SNAPSHOT on DESKTO

2020-10-16 10:06:53 37909 2

原创 SpringBoot@SpringBootApplication注解代码解析

@SpringBootApplicationSpringBootApplication是一个组合注解,以2.3.0.RELEASE为例注解分别如下,我们来逐个分析一下这些注解的作用@Target(ElementType.TYPE)这是java的元注解,java中元注解有四个: @Retention @Target @Document @Inherited;元注解只能对注解进行注解该注解是指定注解的作用目标,ElementType.TYPE指的是做的目标为接口、类、枚举@Retention(Re

2020-09-28 16:27:08 3083

原创 Nginx配置调优

Nginx配置调优全局模块下的调优worker_processesworker_cpu_affinityworker_rlimit_nofileevents 模块下的调优worker_connectionsaccept_mutexaccept_mutex_delaymulti_accept全局模块下的调优worker_processes打开 nginx.conf 配置文件,可以看到 worker_processes 的默认值为 1。worker_processes,工作进程,用于指定 Nginx

2020-09-17 10:11:18 354

原创 零拷贝,多路复用器理论及在Nginx中的应用

了解Nginx的高性能之前我们先要知道两个重要的知识点,零拷贝与多路复用器,以及在Nginx中是如何应用的

2020-09-15 10:08:40 652 1

原创 代理服务器概述

正向代理服务器与方向代理服务器的基础介绍与应用场景概述

2020-09-14 14:52:22 964

原创 Logback 异步输出日志信息

异步输出日志的好处通过异步输出日志减少磁盘IO提高性能配置文件logback-spring.xmlSpringBoot工程自带logback和slf4j的依赖,所以重点放在编写配置文件上,需要引入什么依赖,日志依赖冲突统统都不需要我们管了。logback框架会默认加载classpath下命名为logback-spring或logback的配置文件。将所有日志都存储在一个文件中文件大小也随着应用的运行越来越大并且不好排查问题,正确的做法应该是将error日志和其他日志分开,并且不同级别的日志根据时间段进

2020-08-11 15:03:17 2128 1

原创 一种限流算法-令牌桶算法

业务背景一般做接口限流主要是为了应对突发流量,避免突发流量拖垮服务。如下面一些场景就有可能发生突发流量微博热搜恶意刷单恶意爬虫促销活动令牌桶算法我们用一个桶来盛放令牌,假设桶的上限为100个,令牌生成速度为10个/s。超过100个则丢弃多余的令牌。这样当接口请求突然激增时,前100个可以正常请求,后续则以每秒10个可以正常请求。实现用队列保存令牌,用ScheduledThreadPoolExecutor来定时放令牌一般使用google提供的guava工具包即可 <depend

2020-07-31 09:25:01 216

原创 常用linux命令(自用)

根据端口号查询是否占用netstat -anp |grep 8082作用,可以查询端口是否被占用,为空则该端口未被占用查询进程详细信息ll /proc/端口号作用:可以查询jar执行位置等信息

2020-07-28 09:46:46 611

原创 echarts图标宽度高度自适应

echartsAPI提供的有resize()方法可以达到自适应的效果。我们只需要监听容器的resize事件并调用resize方法即可,代码如下(注意写在setOption后面)myChart.setOption(option);window.addEventListener('resize', function () {myChart.resize();});...

2020-06-11 11:01:01 1582

原创 kafka系列之kafka概述

分布式消息系统 Kafkakafka概述kafka系统架构应用场景kafka概述Apache Kafka 是一个快速、可扩展的、高吞吐的、可容错的分布式“发布-订阅”消息系统,使用 Scala 与 Java 语言编写,能够将消息从一个端点传递到另一个端点,较之传统的消息中间件(例如 ActiveMQ、RabbitMQ),Kafka 具有高吞吐量、内置分区、支持消息副本和高容错的特性,非常适合大规模消息处理应用程序。Kafka 官网: http://kafka.apache.org/kafka系

2020-06-09 15:41:20 327 1

ffmpeg+nginx程序包

基于ffmpeg+nginx,实现rtsp协议摄像头远程播放

2023-08-07

基于字节码的代码混淆加密工具

基于字节码的代码混淆加密工具,使用方法见博客

2023-07-06

nettoplcsim

链接西门子PLC仿真工具包

2022-05-16

MQTT压测计划.jmx

JMeter的MQTT压力测试计划需要的下载

2021-03-31

基于netty的手写rpc框架

基于netty的手写rpc框架。

2020-04-12

m3u8播放器实现

基于开源播放器vlcj-player,追加.M3U8播放功能.

2019-06-04

12306爬虫实现

12306爬虫实现 目前仅能查询余票信息,其余待完善~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2017-12-22

TERASOLUNAServerFrameworkForJavaDevelopmentGuideline.pdf

TERASOLUNAServerFrameworkForJavaDevelopmentGuideline.pdf TERASOLUNA开发文档

2017-11-24

FastDFS安装部署文档

FastDFS安装部署文档

2017-08-30

IE兼容问题列表及解决办法

IE兼容问题列表及解决办法

2017-08-24

支付宝支付JAVA实现

支付宝支付JAVA实现

2017-08-16

空空如也

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

TA关注的人

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