java
文章平均质量分 78
Cicizz_
python这么优雅,所以我们还是用java吧
展开
-
IoT MQ实现篇:Jmqtt设计与源码阅读指导
一、概述本篇是第一篇,主要介绍jmqtt架构思想和一些模块介绍,帮助一些需要使用jmqtt的同学更好的理解Jmqtt,方便问题排查和二次开发。二、Jmqtt架构思想Jmqtt主要分为四大块,上层用netty做协议编解码和与设备间的通信,接收到mqtt报文后进行协议处理及消息分发处理,并对一些mqtt元信息做存储管理等。请先阅读理解mqtt协议,再结合代码一起看,方便理解。三、Jmqtt模块介绍主要关注Jmqtt-broker即可,相关的代码都在这里四、Jmqtt-brok原创 2021-03-15 20:41:58 · 766 阅读 · 1 评论 -
领域驱动设计-从分层架构聊起
一、概述对于比较复杂的业务流程,传统的分层架构等在后续代码可扩展性,可维护性,可测试上存在很大的问题,最近也在学习和研究领域模型相关的设计,实践总结一下。代码仓库:Jmqtt,只关注其中的jmqtt-admin模块即可,欢迎老铁给个star二、传统的分层架构如图:这是一个极简的三层架构模式,每层的关系和职责大约是:WEB层(Controller层):提供http接口给外部,处理参数的接收和响应;依赖业务层;与之类似的层包括:Gateway层,OpenAPI层,服务层(提供RPC给原创 2021-03-01 23:35:12 · 744 阅读 · 0 评论 -
IoT MQ实现篇:Jmqtt3.x升级总篇
欢迎关注Jmqtt并给个star背景之前没怎么运营,纯属感兴趣做的broker,发现star,感兴趣的朋友还挺多的。 之前的版本木有代码注释,木有技术文档,木有测试,不能开箱即用 mqtt5标准版都出了一版了,支持一波目标jmqtt3.0的版本将分为三个大的阶段进行开发发布:目标第一阶段:架构重构 jmqtt3.0版本将实现基于db/redis的存储/集群,基于db的只要有数据库,开箱即用:集群节点理论上可横向扩容(依赖db的性能),理论上集群可支持百万级设备;基于redis的性能更高原创 2021-02-26 14:52:31 · 511 阅读 · 2 评论 -
系统优化实践记录—多线程方面的处理
系统优化实践记录—多线程方面的处理因为mqtt也是一种适合于物联网的mq,简单来说是比较轻量级的mq,对于消息的tps等没有像传统mq那么高,但是要求的是多终端,其中也涉及了很多多线程地方的处理。这里总结和记录一下。一、netty的多线程处理与设置在netty中,有两个EventLoopGroup,维护了两个线程组,如果不设置初始化的大小,那么默认初始化的线程数的大小为:系统内核数*2,如果现在主...原创 2018-05-23 01:45:21 · 358 阅读 · 0 评论 -
系统优化实践记录—JVM
系统优化实践记录—JVMjvm方面的优化往往是系统优化的最后一步,万不得已时才会基于JVM去优化系统,在对mqtt系统进行优化时,也是仅仅对jvm层面进行了少量的修改。下面总结记录一下一、设置合适的JVM大小设置合适的堆的大小:主要涉及三个参数:-Xms:设置JVM的初始化内存的大小,JVM启动时就会分配这么大的内存-Xmx:设置JVM最大可用内存的大小,JVM在运行期间如果内存超过-Xms设置的...原创 2018-05-23 01:45:47 · 398 阅读 · 0 评论 -
IoT MQ设计篇:最终架构与jmqtt介绍
概述本篇是IoT MQ设计篇的最后一篇,前面分别介绍了一些IoT MQ的基本信息以及趟过的开源项目的坑,本篇主要介绍下我们在经历一系列问题后确定的最终架构以及我开源的jmqtt项目的介绍: 最终架构的确定 jmqtt介绍 为什么选择主主架构 最终架构在经历对moquette的深入二次开发后,我们发现仍然有很多需求不能满足,但是却掌握了很多基于mqtt协议的开发...原创 2021-02-26 14:48:46 · 4421 阅读 · 8 评论 -
IoT MQ实现篇:组件选型与插拔式设计
IoT MQ实现篇:组件选型与插拔式设计概述本篇是IoT MQ内部实现篇的第一篇,实现篇主要介绍在内部设计和实现时对很复杂的功能点的设计与考虑,也是jmqtt的内部的具体实现,本篇主要介绍:模块化与各个组件的选型模块插拔式的设计模块化与各个组件的选型模块化和组件两个概念总是在设计架构时会讨论到的两个概念,一般来说,模块化是指功能上的拆分,将各个功能拆分为模块,组件化指根据模块对于技...原创 2021-02-26 14:47:38 · 1173 阅读 · 2 评论 -
系统优化实践记录
系统优化实践记录—引言从2017年11月初截至2018年5月,一直在从事一个mqtt消息中间件项目的开发,整个项目从最初的开发到如今稳定的运营也经历主要四个阶段,这里总结下在对系统进行优化时的一些处理。四个阶段主要有开源项目选型,最终综合选择了一款开源但是不成熟的mqtt代理作为开发的原型。存储实现与优化,由于开源的不支持集群和数据的持久化(持久化实现的很差),我们自己实现了数据的持久化和集群。对...原创 2018-05-10 20:28:37 · 313 阅读 · 0 评论 -
初探JVM之java内存区域
这些理解都是基于学习《深入理解Java虚拟机》的,因为很多还不能理解,这里以及后面就只总结我可能常用到或要分析的最重要是我理解到了的~~。 Java运行时数据区域 方法区、虚拟机栈、本地方发栈、堆、程序计数器 他们有的随着虚拟机进程的启动而存在,有的则依赖用户线程的启动和结束而建立和销毁。 程序计数器 这是一块较小的内存空间,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行原创 2016-03-04 09:01:08 · 354 阅读 · 0 评论 -
初探JVM之对象的创建
对象的创建 虚拟机在遇到一条一条new指令时,首先先检查该指令的参数能否在常量池中定位到这个类的符号引用,并检查该类是否被加载,解析,初始化过,若没有,则先加载。 若类加载检查通过,则将为新生对象分配内存,对象所需内存的大小在类加载完后就可确定,有两种方式,第一种是“指针碰撞”,指针碰撞方式指在分配内存时,就像一边是用过来的,一块是没用过的,中间有一个指针是分界线,在需要新分配一块内存时,指针就原创 2016-03-10 09:33:07 · 432 阅读 · 0 评论 -
初探JVM之垃圾收集算法
当垃圾收集成为系统达到更高并发量的瓶颈时,就需要对“自动化”的技术实施必要的监控和调节。 引用计数算法 就是对一个对象添加一个引用计数器,每当有一个对象引用时,计数器就加1,引用失效时,对象减一,当计数器为0时,代表不可能再被使用,就开始回收。 但是在主流java虚拟机里面没有选用引用计数算法来管理内存,因为它很难解决对象之间相互循环引用的例子,比如objA.instance = objB,o原创 2016-03-10 10:35:25 · 436 阅读 · 0 评论 -
初探JVM之垃圾收集器
前面大约了解了下JVM的垃圾收集算法,如果说收集算法是内存回收的方法,那么垃圾收集器就是内存回收的具体实现。现在HotSpot虚拟机都是用的G1收集器。 这里先总结下具体收集器的使用地方: 新生代:Seria,ParNew,Parallel Scavenge. 老生代:CMS,Parallel Old,Serial Old(MSC) 其实从它们处于不同的堆的代也大致能猜出它们使用了那些算法!原创 2016-03-11 20:40:17 · 373 阅读 · 0 评论 -
AES加密在linux上的问题
AES加密在Linux上加密和解密都必须加上 KeyGenerator kgen = KeyGenerator.getInstance("AES"); SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); random.setSeed(encryptKey.getBytes()); k原创 2017-02-27 13:59:28 · 1816 阅读 · 1 评论 -
springboot与mybatis整合dao层不能注入的问题
需要重写VFS,并将其在mybatis整合类中指定为VFS的实现类public class SpringBootVFS extends VFS { private final ResourcePatternResolver resourceResolver; public SpringBootVFS() { this.resourceResolver = new Path原创 2017-02-27 14:03:18 · 7064 阅读 · 3 评论 -
事物—事物四大特性
事物(一)——事物四大特性原子性(Atomicity)原子性是事物最小的单元,是不可再分的,对一个数据库小的操作。这些必须同时完成,如果有一个失败了。则一切的操作都全部失败。比如A给B转账,A是一个操作,B也是一个操作。A转账失败,则B接帐也失败一致性(Consistency)指在数据库操作前后是完全一致的。这个一致可以理解为对数据库操作的有效性。如果事物正常操作则系统会维持有效性,如果事物操作失败原创 2017-08-01 22:56:33 · 4028 阅读 · 0 评论 -
事物—事物的传播性与Spring事物传播特性
事物的传播性我们都知道事务的概念,那么事务的传播特性是什么呢?(此处着重介绍传播特性的概念,关于传播特性的相关配置就不介绍了,可以查看spring的官方文档) 在我们用SSH开发项目的时候,我们一般都是将事务设置在Service层 那么当我们调用Service层的一个方法的时候它能够保证我们的这个方法中执行的所有的对数据库的更新操作保持在一个事务中,在事务层里面调用的这些方法要么全部成功,要么全转载 2017-08-03 20:25:24 · 605 阅读 · 0 评论 -
java中==和equals和hashcode的区别
一、相同点都是用来进行值或对象的比较。二、不同点对于“==”而言,对于基本类型(char,byte,short,int,long,float,double,boolean),对比的是值,所以是相等的,对于引用对象,对比的是引用的对象的堆地址,例如:public class Main { public static void main(String[] args) throws Interr...原创 2018-04-24 21:31:58 · 267 阅读 · 0 评论 -
抽象类与接口的异同及实践
抽象类与接口的异同及实践一、相同点 都不能被实例化二、不同点抽象类可以定义具体的方法,(jdk8以后,接口也是可以定义具体的方法的,必须有default关键字)接口是implements,抽象类是extends设计理念不同,接口是“has-a”,抽象类是"is-a"抽象类可以有构造器,接口没有,抽象类的构造方法是不能直接实例化的,但是一旦一个具体的类继承了抽象类,那么就可以在子类中调用抽象类的构...原创 2018-04-24 22:09:28 · 289 阅读 · 0 评论 -
jdk动态代理与cglib动态代理
最近学习springaop的知识,看到了其中的aop的代理的实现,现在总结一下,aop的代理其实就是用jdk的动态代理或者cglib动态代理来实现的,所谓的代理就是来给某个方法,在执行这个方法之前多一些事,在执行这个方法之后做一些事,下面各个分析一下: jdk动态代理 jdk动态代理需要4样东西,1.目标对象,2.织入类(用于增强),3.代理类,4、接口,下面写一个服务员问好的例子//目标原创 2016-03-01 13:19:02 · 443 阅读 · 0 评论