- 博客(97)
- 资源 (9)
- 收藏
- 关注
原创 【nacos】加载配置文件顺序解析
即如果我的共享配置指定为application.yml扩展配置为redis.yml,application.name是app1,active是dev的话加载顺序如下这里注意优先级,优先级是跟加载顺序相反,即application.name+active+file-extension的优先级最高。
2023-10-10 15:27:27
2884
原创 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
1418
原创 TDengine + Telegraf + Grafana 实现图形化服务器状态监控
Telegraf 是一个开源的指标收集代理,用于从各种数据源收集、处理和传输指标数据。它是由InfluxData(现在称为InfluxDB)开发的一款工具,旨在帮助用户轻松地收集系统、应用程序和服务的性能指标数据,并将其发送到不同的目标数据存储、监控系统或时间序列数据库中,以便后续的分析和可视化。只有当安装第二个或以后更多的节点时,才需要输入已有集群中任何一个可用节点的 FQDN,支持该新节点加入集群。Grafana 是一个开源的数据可视化和监控平台,用于创建、查看和分享各种数据源的实时图表和仪表盘。
2023-08-08 15:32:24
1014
原创 ffmpeg+nginx实现rtsp协议摄像头web端播放
http://nginx服务器IP:配置代理的端口(server中定义的)/location定义的代理地址/ffmpeg中自定义的流的名称.m3u8。如果你使用的是海康威视得摄像头构成一般为rtsp://摄像头用户名:密码@摄像头IP:摄像头端口/Streaming/Channels/摄像头标识。这些资源已经上传需要的可以自己下载,这个压缩包里的nginx已经安装好所需模块,解压即可使用。VLC->媒体->打开媒体串流。
2023-08-07 15:29:22
3418
2
原创 从零开始搭建属于自己的物联网平台(四)实现基于协议包的动态协议解析
一个协议包可能有多个DeviceMessageCodec(根据协议包解析的网络协议来的,比如需要解析TCP、MQTT两种那就添加两个DeviceMessageCodec),每个DeviceMessageCodec都实现了上行消息解析、下行消息解析两个功能。针对这一场景,以加载jar包的形式来实现,指定标准的接口,只要在jar包中实现对应的接口,做标准的协议解析方法就可以了(这里要注意,要支持设备上下行消息解析)。定义协议解析包对象应具有的功能。
2023-07-24 17:18:46
1013
原创 【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
584
原创 【jar包加密】基于字节码的jar包加密
使用开源的基于字节码的jar包混淆加密工具class-winter项目地址参数是否必填说明示例是指定要加密的jar/war文件注:当使用maven插件进行自动加密时,此参数非必填,不填则自动获取。注:当使用maven插件进行自动加密时,可结合maven相关占位符进行相对定位。如:${project.basedir}/../../your-project.jar是通过前缀匹配的形式定位要加密的class注:多个通过逗号分割。cca(依托于includePrefix)否。
2023-07-06 10:46:13
1239
原创 【ElasticSearch】ElasticSearch的倒排索引
ElasticSearch是一个基于Apache Lucene构建的开源搜索引擎,它提供了强大的全文搜索和分析功能。它不仅可以快速搜索和检索大量的结构化和非结构化数据,还具备水平扩展和高可用性的特性。
2023-06-25 17:17:27
4898
原创 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
1660
原创 从零开始搭建属于自己的物联网平台(三)基于netty实现mqtt server网关
定义网关接口,规定网关需要实现的方法。/*** 设备网关/*** @return 网关ID/*** @return 网关端口/*** @return 支持的传输协议/*** 启动网关* @return 启动结果/*** 关闭网关* @return 关闭结果/*** 网关状态* @return 网关状态。
2023-06-14 09:24:58
4719
4
原创 基于redis实现秒杀并防止超卖
大家可以想一下上边实现方式对于多个库存的商品是否适用,其实答案很简单,是不太适用的,针对多个库存的商品,不能使用类似于分布式锁的方式,因为该种方式同时只能由一个用户争抢到资源,只有等找个用户完成了下单动作释放掉锁之后其他用户才可以继续进行,所以秒杀效率特别底下。因为所有redis的操作(这里指的是key的操作,像备份落盘之类的另算)都是单线程的,所以是线程安全的,但是有一点需要注意,这里线程安全仅仅指的是单个操作,如果有连续性的操作,需要使用lua脚本来保证原子性。仅有100个用户抢到了资源。
2023-06-08 10:58:43
3168
原创 深入了解Java中的List集合
Java中的List集合是一种常用的数据结构,它提供了一种有序、可重复的元素集合。在开发中,我们经常需要使用List来存储和操作一组数据。本文将深入介绍Java中List集合的特性、常见的操作方法以及一些使用技巧,帮助读者更好地理解和应用List集合。
2023-06-01 14:45:36
3242
原创 从零开始搭建属于自己的物联网平台(二)实现基于订阅发布的消息总线
这里使用@ConditionalOnProperty来修饰该实现类,这样目的是让redis stream作为消息总线的默认实现,如果后续添加别的实现,可以在配置文件中便利的配置。这里生产者处理逻辑比较简单,当设备消息或者其他业务的消息产生的时候,调用生产者实现的发布方法将消息推送至消息总线。EventBus实体,主要负责三个功能,发布、订阅的入口,以及管理维护MessageAdapter。首先,像这种平台的功能,一定要做好抽象设计,预留好功能扩展的接口。订阅者组内多播处理抽象类。
2023-05-29 10:54:18
2232
5
原创 响应式背压处理物联网高并发下设备消息写入
传统的 BIO,是线程将数据写入 Connection 之后,当前线程进入 Block 状态,直到响应返回,之后接着做响应返回后的动作。NIO 则是线程将数据写入 Connection 之后,将响应返回后需要做的事情以及参数缓存到一个地方之后,直接返回。在有响应返回后,NIO 的 Selector 的 Read 事件会是 Ready 状态,扫描 Selector 事件的线程,会告诉你的线程池数据好了,然后线程池中的某个线程,拿出刚刚缓存的要做的事情还有参数,继续处理。
2023-05-24 18:10:02
323
原创 从零开始搭建属于自己的物联网平台(一)需求分析以及架构设计
针对消息体我们应该支持自由的解析方式,这里我打算采用自定义解析jar的方式,针对每一个新的设备,开发出不同的解析jar然后上传到服务器上,消息到来之后我们调用对应的jar来解析消息。采用spring loud全家桶(使用若依微服务版,若依就挺好的这一块就不重复造轮子了),各个服务之间的调用摒弃掉feign调用的方式,针对物联网项目的特点,准备采用发布订阅模式,将各个业务转化为一个个不同的流或者说是时间,流的起点以及终点分别的设备消息的到来与入库,其他上层业务订阅这些不同的流来达成扩展。
2023-05-24 15:58:45
3007
原创 如何创造一个属于自己的springboot stater
stater是一种特殊的spring boot 工程,它实现了一些共同性的功能,使你可以依赖过来直接使用,又在配置上做出了一些默认的约定,是你不需要进行复杂的配置。
2023-05-22 14:22:56
811
原创 Springboot实现热加载其他spring boot 服务
想要实现热加载,一定得了解在spring中类的加载机制,大体上spring在扫描到@Component注解的类时,会根据其class生成对应的BeanDefinition,然后在将其注册在BeanDefinitionRegistry(这是个接口,最终由DefaultListableBeanFactory实现)。想要设计一个stater,可以方便加载一个可以完整运行的springboot单体jar包,为了在已执行的服务上面快速的扩展功能而不需要重启整个服务,又或者低代码平台生成代码之后可以快速预览。
2023-05-17 15:18:33
2263
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
799
原创 【西门子】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
5831
17
原创 关于MySQL、redis双写一致性的思考
双写一致性的思考首先先说结论思考的问题针对问题的讨论先更新缓存,再操作数据库先操作数据库,再更新缓存先删除缓存,再操作数据库先操作数据库,再删除缓存提供一个方案首先先说结论我认为没有办法来保证MySQL、redis的双写强一致性。最终下边文章讨论的只是双写的最终一致性。思考的问题应该先操作数据库,还是先操作缓存?操作缓存时是应该删除还是更新?针对问题的讨论其实针对上面的两个问题,可以分成四种情况先更新缓存,再操作数据库先删除缓存,再操作数据库先操作数据库,再更新缓存先操作数据库,
2022-04-21 18:23:25
761
原创 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
721
原创 响应式开发初探。基于ProjectReactor的响应式服务
响应式开发初探前言响应式编程与传统BIO响应式编程DEMO引入依赖响应式的Mongodb客户端响应式Web支持完整的pom文件编写entity编写controllerFluxMono编写Repository编写service运行测试后记前言响应式编程与传统BIO传统的 BIO,是线程将数据写入 Connection 之后,当前线程进入 Block 状态,直到响应返回,之后接着做响应返回后的动作。NIO 则是线程将数据写入 Connection 之后,将响应返回后需要做的事情以及参数缓存到一个地方之后,
2021-04-16 18:08:25
212
原创 使用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
10042
16
原创 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
8285
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
246
原创 Nacos的Raft 算法
Nacos Discovery 集群为了保证集群中数据的一致性,其采用了 Raft 算法。这是一种通过对日志进行复制管理来达到一致性的算法。Raft 通过选举Leader 并由 Leader 节点负责管理日志复制来实现各个节点间数据的一致性。Raft 算法不是强一致性算法,是最终一致性算法。
2020-11-09 15:04:44
4021
1
原创 树形结构闭包表设计
树形结构闭包表设计闭包表设计闭包表设计闭包表是解决分层存储一个简单而又优雅的解决方案,它记录了表中所有的节点关系,并不仅仅是直接的父子关系。 在闭包表的设计中,额外创建了一张节点关系表(空间换取时间),它包含两列,每一列都是一个指向树形结构中主键的外键。这张表存放包括自身在内的所有的和他有关系的节点数据CREATE TABLE Comments( CommentId int PK, ArticleId int, CommentBody int, FOREIGN KEY(Articl
2020-11-05 10:58:45
2362
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
39205
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
3224
原创 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
592
原创 零拷贝,多路复用器理论及在Nginx中的应用
了解Nginx的高性能之前我们先要知道两个重要的知识点,零拷贝与多路复用器,以及在Nginx中是如何应用的
2020-09-15 10:08:40
1083
1
原创 Logback 异步输出日志信息
异步输出日志的好处通过异步输出日志减少磁盘IO提高性能配置文件logback-spring.xmlSpringBoot工程自带logback和slf4j的依赖,所以重点放在编写配置文件上,需要引入什么依赖,日志依赖冲突统统都不需要我们管了。logback框架会默认加载classpath下命名为logback-spring或logback的配置文件。将所有日志都存储在一个文件中文件大小也随着应用的运行越来越大并且不好排查问题,正确的做法应该是将error日志和其他日志分开,并且不同级别的日志根据时间段进
2020-08-11 15:03:17
2217
1
原创 一种限流算法-令牌桶算法
业务背景一般做接口限流主要是为了应对突发流量,避免突发流量拖垮服务。如下面一些场景就有可能发生突发流量微博热搜恶意刷单恶意爬虫促销活动令牌桶算法我们用一个桶来盛放令牌,假设桶的上限为100个,令牌生成速度为10个/s。超过100个则丢弃多余的令牌。这样当接口请求突然激增时,前100个可以正常请求,后续则以每秒10个可以正常请求。实现用队列保存令牌,用ScheduledThreadPoolExecutor来定时放令牌一般使用google提供的guava工具包即可 <depend
2020-07-31 09:25:01
277
原创 常用linux命令(自用)
根据端口号查询是否占用netstat -anp |grep 8082作用,可以查询端口是否被占用,为空则该端口未被占用查询进程详细信息ll /proc/端口号作用:可以查询jar执行位置等信息
2020-07-28 09:46:46
682
原创 echarts图标宽度高度自适应
echartsAPI提供的有resize()方法可以达到自适应的效果。我们只需要监听容器的resize事件并调用resize方法即可,代码如下(注意写在setOption后面)myChart.setOption(option);window.addEventListener('resize', function () {myChart.resize();});...
2020-06-11 11:01:01
1646
原创 kafka系列之kafka概述
分布式消息系统 Kafkakafka概述kafka系统架构应用场景kafka概述Apache Kafka 是一个快速、可扩展的、高吞吐的、可容错的分布式“发布-订阅”消息系统,使用 Scala 与 Java 语言编写,能够将消息从一个端点传递到另一个端点,较之传统的消息中间件(例如 ActiveMQ、RabbitMQ),Kafka 具有高吞吐量、内置分区、支持消息副本和高容错的特性,非常适合大规模消息处理应用程序。Kafka 官网: http://kafka.apache.org/kafka系
2020-06-09 15:41:20
607
1
TERASOLUNAServerFrameworkForJavaDevelopmentGuideline.pdf
2017-11-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人