自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

九天揽月

IOT builder

  • 博客(39)
  • 资源 (5)
  • 收藏
  • 关注

原创 java连接MQTT服务器(Springboot整合MQTT)

目录一、业务场景二、本文只讲解java连接MQTT服务器进行数据处理一、业务场景硬件采集的数据传入EMQX平台(采用MQTT协议),java通过代码连接MQTT服务器,进行采集数据接收、解析、业务处理、存储入库、数据展示。MQTT 是基于发布(Publish)/订阅(Subscribe)模式来进行通信及数据交换的。二、本文只讲解java连接MQTT服务器进行数据处理...

2020-01-13 19:38:18 35905 70

原创 FastJson转化时BigDecimal与Double问题

在使用FastJson将json字符串转化为jsonObject时,FastJson默认会将小数转为BigDecimal类型,但有时候我们想要的是double类型。

2024-04-16 13:50:45 199

原创 pnpm:无法加载文件 xxx.pnpm.ps1

pnpm:无法加载文件 xxx.pnpm.ps1,因为在此系统上禁止运行脚本

2023-12-26 09:43:01 124 1

原创 Linux下设置网关以及网络相关命令

Linux下设置网关以及网络相关命令

2023-10-19 14:26:11 1360

原创 Java虚拟机(Jvm)中类加载器(ClassLoader)

一、类加载器机制与分类1、类加载机制每个编写的”.java”拓展名类文件都存储着需要执行的程序逻辑,这些”.java”文件经过Java编译器编译成拓展名为”.class”的文件,”.class”文件中保存着Java代码经转换后的虚拟机指令,当需要使用某个类时,虚拟机将会加载它的”.class”文件,并创建对应的class对象,将class文件加载到虚拟机的内存,这个过程称为类加载,这里我们需要了解一下类加载的过程,如下:【加载】:类加载时类加载过程的第一个阶段,在加载阶段,虚拟机需要完.

2022-05-27 13:26:09 520 1

原创 MQTT与TCP通信协议的对比

一、背景在物联网场景开发中,大多数通信模组都支持TCP、UDP、MQTT、CoAP、HTTP、LwM2M等网络通信协议,其中既有负责传输层协议,也有应用层协议,不同协议适用的场景也不尽相同。二、协议分层上图中举例了网络分层中最常见的几种协议:应用层:应用程序负责将数据以相应规则(协议)进行包装,发给传输层 MQTT:消息队列遥测传输 CoAP:受限应用协议 HTTP:超文本传输协议 传输层:负责将应用层传输过来的数组进行分组,为确保终端接收数据的顺序和完整性,会对每个分

2022-02-17 17:44:51 21935 2

原创 Golang—— GMP模型发展(一)

Golang中的GMP模型

2022-02-16 17:35:25 679

原创 关于工业互联网的浅薄认知--3

前言数字化转型需要进行各层次融合,解决数据孤岛,做到数据连通,真正挖掘数据作用。平台融合1、纵向终端与云端融合这就是物理层的互联互通,到数据采集的自动化、可视化、直到整个分析的数字化服务。我这里做了一个展示图。首先有一个边缘的感知,包括你的控制系统、设备,在不同情况下,你来采集数据,可以用公有云,在边缘也可以用私有云。最重要的是数据的管理和分析,不同来源的数据怎么融合起来。当你有了这些东西,就既可以提供远程的服务,也可以提供线下的服务。实际上在数字化里面也有O2O...

2021-10-15 17:56:44 134

原创 关于工业互联网的浅薄认知--2

前言为什么很多公司上了ERP、MES等系统,仍然效率很低?企业数字化改革3大挑战都有哪些?一、管理第一个挑战肯定在管理上面,其实最根本的还是战略首先得理解自己战略目标是什么。有的企业是大批量生产相对单一的产品,有的是小批量定制化的。我们刚才讲了有连续工艺,也有离散制造。如果你是做小批量定制化产品的,再去搞大型的自动化,未必是一个最好的解决方案。讲完战略,接下来是文化,很多时候制造业在做数字化,员工觉得这是IT部门,信息化部门...

2021-10-15 16:26:54 311

原创 关于工业互联网的浅薄认知--1

前言第一次工业革命(蒸汽时代):18世纪60年代—19世纪中 第二次工业革命(电气时代):19世纪下半叶—20世纪初 第三次工业革命(信息化时代):20世纪后半期,约在二战之后 第四次工业革命(智能化时代):21世纪开始工业4.0关键点:工业4.0有一个关键点,就是“原材料(物质)”=“信息”。具体来讲,就是工厂内采购来的原材料,被“贴上”一个标签:这是给A客户生产的XX产品,XX项工艺中的原材料。准确来说,是智能工厂中使用了含有信息的“原材料”,实现了“原材料(物质)”...

2021-10-15 14:58:44 106

原创 深入理解TCP与UDP的区别

一、前言经常在面试中被问到网络协议,TCP/IP协议簇中最具有代表性的两个传输层协议:Tcp与Udp的区别,网上好多二、TCP/IP网络模型

2021-10-15 14:12:40 121

原创 IEC104协议

项目介绍 该项目基于Netty实现的底层网络通信,支持从站服务端、主站客户端的模式, 可以通过Master采集数据,也可以通过Slave模拟终端。该项目已经支持: S帧、U帧、总召唤指令、沾包拆包等功能,由于104协议部分内容存在可扩展性,因此本项目只完成通讯部分以及协议的解码和转码部分。在实际使用过程中需要按照硬件厂商提供的点表再将消息部分装换成可识别的业务对象。使用### 主站// 创建一个配置文件Iec104Config iec104Conf...

2021-09-03 14:24:25 1680

原创 DDD+双中台

一、背景 DDD(Domain Driven Design):领域驱动设计 。 随着业务的发展,每个产品都需要对应数量的开发者作为支撑,但在长期的协作中,我们发现开发团队都会遇到一些普遍难点:构建速度慢、开发测试周期长、协作困难等。在快速的业务迭代中,各团队的开发人员往往只会将所在团队的问题进行简单的优化,因此会存在各大团队重复造轮子、耦合严重的现象。针对这种情况,需要将开发中遇到的问题进行抽象、形成一个统一的解决方案。二、案例说明我...

2021-07-29 09:45:08 258

原创 Golang基础语法-切片(slice)

一、前言Go语言中有数组与切片的概念,两者最简单的区别就是,数组在声明的时候需要指定数组大小,数组类型和操作不够灵活,而切片不需要,因此Go中常用的就是切片,本文主要讲解切片。二、切片(slice) 切片就是一种简化版的动态数组。下面是切片的结构定义,reflect.SliceHeader:type SliceHeader struct { Data uintptr Len int Cap int}Data 是指向数组的指针 Len 是...

2021-06-28 16:49:20 831

原创 Docker 设置国内镜像源

创建或修改 /etc/docker/daemon.json 文件,修改为如下形式# vi /etc/docker/daemon.json{ "registry-mirrors": ["http://hub-mirror.c.163.com"]}systemctl restart docker.service

2021-06-11 14:12:56 1881

原创 Golang-Go语言关键特性Channel、Goroutine、HTTP Server

一、前言GO语言之所以厉害,是因为它在服务端的开发中,总能抓住程序员的痛点,以最直接、简单、高效、稳定的方式来解决问题。这里我们并不会深入讨论GO语言的具体语法,只会将语言中关键的、对简化编程具有重要意义的方面介绍给大家...

2021-06-09 09:37:48 365

原创 Golang——Go语言发展史(一)

一、前言个人认为:作为一名语言爱好者,需要了解到一门语言的发展史(当然这个在面试的时候属于拓展话题,会让面试官眼前一亮)。如果单纯停留在使用者的角度,二、

2021-06-08 13:04:47 4731

原创 POST与GET的详细区别

一、前言网上大多数介绍都是比较简答的,本文详细介绍了HTTP请求中POST与GET方式的区别。二、HTTP协议中请求方式1、HTTP/1.0中,定义了GET、POST、HEADER三种请求方式2、HTTP/1.1中,新增了五种:PUT、DELETE、OPTIONS、TRACE、CONNECT但是我们一般在项目中编码经常用到的是GET和POST三、GET与POST简单区别1、GET请求在URL中传递参数(有长度限制),POST是在request body中传递参数;2、POST

2021-06-02 18:49:44 969 2

原创 高效序列化protobuf和protostuff的区别

一、前言 在我们的开发过程中,序列化是经常需要处理的问题,比如在做分布式访问数据时,或者是在做redis缓存存储数据时,如果我们涉及的知识面不够广的话,可能会简单的使用JDK的序列化,也即在需要序列化的类上implementsSerializable接口去实现序列化,我想说的是这种方式在小系统中尚且可以用一用,如果是并发很大的系统会受到严重影响,这是由于JDK自带的序列化效率很低,不论是时间上还是空间上。我们经常使用的序列化方式还有XML和Json,说实在的我更多的是使用Json,我觉得它...

2021-06-02 16:23:33 1766

原创 gcc编译器过程

一、gcc编译器四个阶段二、各阶段作用1、预处理阶段预处理器(cpp)根据以字符‘#’开头的命令,修改原始的C程序,例:hello.c中的第一行#include <stdio.h>指令告诉预处理器读取系统头文件stdio.h的内容,并把它直接插入到程序文本中去。结果就得到了另外一个C程序,通常是以.i作为文件扩展名。ps: 控制台输入指令会生成hello.i文本:gcc -E -o hello.i hello.c2、编译阶段编译器(cc1)将文本文件hello..

2021-05-31 16:40:34 1063 1

原创 java string 首字母大写方法(最高效率)

一、老办法java string,需要进行首字母大写改写,网上大家的思路基本一致,就是将首字母截取,转化成大写然后再串上后面的,类似如下代码//首字母大写public static String captureName(String name) {name = name.substring(0, 1).toUpperCase() + name.substring(1);returnname;}————————————...

2021-05-31 14:21:30 15089 1

原创 Java设计模式——策略模式(解决满屏的if/else)

一、业务场景项目需要对接支付系统,根据不同客户类型会有不同的支付方式,比如:支付宝、微信、银联、云闪付等等其他第三方支付平台,这个时候策略模式就大展身手了。传统的if/else/switch 等等判断的写法太low了,代码糅合在一块,维护也不方便。二、简单代码示例1、实体类准备订单信息类package com.iot.designpattern.strategy.model;import lombok.Data;import lombok.experimental.Acces

2021-05-18 17:02:04 5528 3

原创 CRC16校验

一、业务场景近期应项目要求,结合硬件情况,需要做一个OTA升级功能,刚开始没有用到CRC校验,后来在测试的过程中,发现数据包会出现问题(ps:迎合low的硬件,需要数据分包下发,每包数据不能超过1k),所以在原有的基础协议上加上CRC16校验 放在每包数据的最后2位。(ps:需要支持比较low的硬件,当然比较牛的硬件直接可以下发一个升级包的请求链接,设备自动请求oss等存储系统)二、CRC16用法本文只讲解如何在java使用CRC16,主要采用查表法。举例:byte[] data

2021-04-01 17:18:02 815

原创 sql进行数据行转列、列转行

一、行转列1、数据库原有的数据(左),转化后的数据格式(右)------------------>2、sql语句,一下有两种方式第一种:使用CASE...WHEN...THENSELECT userid,SUM(CASE `subject` WHEN '语文' THEN score ELSE 0 END) as '语文',SUM(CASE `subject` WHEN '数学' THEN score ELSE 0 END) as '数学',SUM(CASE `subj...

2020-11-30 15:44:35 3131

原创 使用Flutter连接 MQTT

一、前言Flutter是 Google 推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart 语言开发 App,一套代码同时运行在 iOS 和 Android 平台。 Flutter 提供了丰富的组件、接口,开发者可以快速地为 Flutter 添加 native 扩展。同时 Flutter 还使用 Native 引擎渲染视图,这无疑能为用户提供良好的体验。MQTT是一种基于发布/订阅模式的轻量级物联网消息传输协议,可在严重受限的硬件设备和低带宽、高延迟的网络上实...

2020-08-05 10:13:28 1539

原创 数据库多租户数据隔离设计

1.什么是saas系统引用百度百科上面的描述,“SaaS平台是运营saas软件的平台。SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台,并负责所有前期的实施、后期的维护等一系列服务,企业无需购买软硬件、建设机房、招聘IT人员,即可通过互联网使用信息系统。SaaS 是一种软件布局模型,其应用专为网络交付而设计,便于用户通过互联网托管、部署及接入。”也就是说,我只需要能连接上互联网,并且给saas平台交租金,我就能用saas平台给我提供的系统服务。这方面最典型的例子就是各种..

2020-08-03 11:30:09 2381 4

原创 JavaScript通过WebSocket连接MQTT服务器(mqttws31.js、mqtt.js)

一、业务场景有时候我们采用MQTT协议接收到的消息想直接在前端页面展示,由于MQTT客户端在订阅后接收到的消息是在回调函数中处理的,所以无法直接将消息发送给前端展示,此时就用到的MQTT对应的WebSocket。二、本文暂时介绍对于mqttws.js的使用...

2020-07-23 14:56:33 5347 6

原创 EMQ桥接kafka插件编写(erl语言)——emqx_plugin_kafka.conf

一、业务场景物联网平台的搭建,大多数是进行硬件数据采集、上报。当数据量大的时候,我们可以在EMQ后面桥接kafka,开源社区版本的EMQ本身自带的插件中没有kafka,所以我们需要自己编写erl插件进行编译、安装,比较麻烦(对erl语言不了解啊)。我个人是采用写客户端转发数据至kafka,这种自己可控,易懂。二、操作步骤链接如下:EMQ集成kafka插件(erl语言)注:从v4.1版本开始,EMQ X MQTT 服务器 提供了专门的多语言支持插件emqx-extension-hook,开发者

2020-07-15 16:28:33 1389 2

原创 MQTTv5.0协议详解

一、MQTT协议具体是什么MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),基于TCP/IP的长连接。MQTT是机器对机器(M2M)/物联网(IoT)连接协议,发布/订阅模式,是专为受限设备和低带宽、高延迟、不可靠网络而设计。作为一种低开销、低时延、低带宽占用的即时通讯协议,MQTT在物联网、小型设备、移动应用等方面有广泛的应用。目前最新版本为:v5.0,在v3.1.1版本的基础上增加了会话/消息延时功能、原因码、主题别名、in-flight流

2020-07-02 19:06:54 3195

原创 emqx开启mysql插件进行动态认证鉴权

emqx开启mysql插件一、简述采用emqx搭建mqtt服务器,基于主题(topic)的发布订阅模式。在线上项目中使用,肯定要进行动态的认证和topic权限鉴权,动态管理连接emqx的用户名和密码,以及用户对应的主题权限,本文采用外接mysql形式进行用户管理。二、开启插件前准备好数据库在mysq...

2020-05-03 22:42:10 3256

原创 阿里物联网平台(IOT)——业务服务器获取阿里iot平台接入设备的实时设备采集数据

基于HTTP/2通道的服务端订阅-设备状态和数据一、服务端订阅 服务端订阅流程 在IoT场景,有时候我们期望业务服务器能接收到设备状态和设备采集的数据,而不是通过云产品中转, 这时我们可以开启服务端订阅,IoT平台会把设备产生的消息通过HTTP/2通道推送到业务服务器,以便根据自身业务场景消费。 注...

2020-05-01 23:21:09 2488

原创 开放服务器端口-linux 7.X防火墙端口命令

1、查看当前防火墙的状态命令:firewall-cmd --state2、启动防火墙:systemctl start firewalld3、关闭防火墙:systemctl stop firewalld4、重启防火墙:firewall-cmd --reload 或者systemctl restart firewalld5、查看已开放端口:firewall-cmd -...

2020-03-27 12:12:31 611

原创 IoT时代下的时序数据库——InfluxDB

一、简述1、InfluxDB是一款用Go语言编写的开源分布式时序、事件和指标数据库,使用 Go 语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展,是 InfluxData 的核心产品。该数据库现在主要用于存储涉及大量的时间戳数据2、主要应用于:物联网(Iot)传感器数据,性能监控、应用程序指标、实时分析等场所。3、特征如下:– 无结构(无模式):可以是任意数量的列(ta...

2020-02-11 20:24:12 1977

原创 java如何监听MQTT客户端状态(在线、离线)

一、业务场景好多朋友在咨询如何得知(监测)MQTT客户端状态(在线、离线),或者可以说是监测采集器状态。其实这个在MQTT协议中已经给出系统主题,MQTT服务端可以知道客户端的任何情况,比如:什么时候上线和下线。二、解决方案$SYS/brokers/${node}/clients/${clientid}/connected:上线事件。当某客户端上线时,会向该主题(Topic)发布消...

2020-01-17 15:37:47 19101 44

原创 MQTT将订阅到的消息存储数据库

一、业务场景 提示:对于Broker(MQTT服务器)来说,不论我们是发布方,还是订阅方,都是属于客户端 硬件方面将采集的数据上报至MQTT服务器,我们平台(自己的WEB服务)将订阅到的消息存储数据库,如何用JAVA作为客户端订阅消息在我的上一篇文章中有讲解如何使用JAVA编写MQTT客户端连接MQTT服务器。 好多朋友在看官网的时候对于这一...

2020-01-16 09:44:07 18020 28

原创 MQTT设置自动重连后,无法自动订阅以前的主题

一、业务场景我们在使用MQTT的时候,在设置客户端参数的时候设置的自动重连属性,但是断开重连后无法订阅断开之前订阅的消息。二、异常处理在设置MQTT客户端参数配置的时候记得设置不要清除Session即可 /** * MQTT连接参数设置 */ private MqttConnectOptions mqttConnectOptions(String...

2020-01-15 16:28:53 5888 2

原创 MQTT异常掉线原因

一、业务场景我们在使用MQTT协议的时候,有些伙伴可能会遇到MQTT客户端频繁掉线、上线问题二、原因分析及异常处理 原因:使用相同的clientID 方案:全局使用的clientID保证唯一性,可以采用UUID等方式 原因:在回调函数内进行业务处理遇到异常并没有捕获 方案:在可能出现异常的语句块,进行try-catch捕获​​​​​​​ /** * ...

2020-01-15 16:12:04 29072 17

原创 springboot开启事务注解@Transactional(rollbackFor = Exception.class),但事务仍未生效,回滚失败

一、业务场景 1、springboot搭建项目,因为有些查询方法不需要开启事务,所以没有在service服务实现类上面直接添加,而是在service服务实现类中某些需要事务的方法上面添加事务回滚注解@Transactional(rollbackFor = Exception.class),但是在操作业务的时候同时向多个表插入数据,其中有一个插入异常,别的插入正常,事务正常情况下插入...

2020-01-15 10:17:10 7665

原创 Nginx+OSS 搭建文件服务器(内外网的坑)

目录业务场景具体配置修改nginx.conf,下面给出主要配置 业务场景 因为不能直接用外网访问OSS服务器,所以用到了nginx 来进行反向代理,配置完成后,内网通过nginx可以访问到,但是外网还是访问不到。 使用文件服务器,可以做动、静态资源分离,减少服务器压力。 具体配置 搭建好nginx服务器,拥有一台OSS服务器 修改nginx.con...

2020-01-14 11:23:04 3343

mqtt压测-并发上报数据.jmx

Jemeter-mqtt连接上报数据压测脚本

2021-05-20

openapi上报数据.jmx

Jemeter测试脚本-API接口

2021-05-20

CRC16Utils.java

JAVA进行CRC16校验,查表法

2021-04-01

websocket连接MQTT服务器所用的js文件——mqtt.js和mqtt.min.js

mqtt.js库,下载后可以用找我要源码和压缩文件(mqtt.min.js),有问题随时请教

2020-07-24

mqttws31.js

mqtt对应的js工具包,可以用来在WebSocket中使用,基于主题的订阅/发布,进行对应的函数封装,直接操作方便简单

2020-07-23

空空如也

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

TA关注的人

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