RabbitMQ-基本操作
参考文献
RabbitMQ实战
基本命令
服务器操作指令
1234567891011121314# 查看服务器状态./rabbitmqctl status# 启动RabbitMQ./rabbitmq-server# 以守护进程方式启动RabbitMQ./rabbitmq-server -detached# 停止RabbitMQ./rabbitmqctl stop# 打印RabbitMQ的配置文件信息cat /etc/rabbitmq/rabbitmq.conf
RabbitMQ中每个队列,交换器和绑定的元数据(除了消息的内容)都保存到Mnesia中.Mnesia是内奸在Erlang的非SQL型数据库.Mnesia通过将RabbitMQ元数据首先写入一个仅追加的日志文件,以确保其完整性.然后,它再定期将日志内容转储到真实的Mnesia数据库文件中.
用户相关操作指令
123456789101112131415161718# 创建用户rabbitmqctl add_user test testpwdAdding user "test" ..# 删除用户rabbi ...
(转载)Git飞行规则(Flight Rules)
Git飞行规则(Flight Rules)
前言
英文原版README
翻译可能存在错误或不标准的地方,欢迎大家指正和修改,谢谢!
什么是"飞行规则"?
这是一篇给宇航员(这里就是指使用Git的程序员们)的指南,用来指导问题出现后的应对之法。
飞行规则(Flight Rules) 是记录在手册上的来之不易的一系列知识,记录了某个事情发生的原因,以及怎样一步一步的进行处理。本质上,
它们是特定场景的非常详细的标准处理流程。 […]
自20世纪60年代初以来,NASA一直在捕捉(capturing)我们的失误,灾难和解决方案, 当时水星时代(Mercury-era)
的地面小组首先开始将“经验教训”收集到一个纲要(compendium)中,该纲现在已经有上千个问题情景,从发动机故障到破损的舱口把手到计算机故障,以及它们对应的解决方案。
— Chris Hadfield, 一个宇航员的生活指南(An Astronaut’s Guide to Life)。
这篇文章的约定
为了清楚的表述,这篇文档里的所有例子使用了自定义的bash 提示,以便指示当前分支和是否有 ...
工具-插件篇
插件篇
Chrome插件
GitHub Downloader
Octotree - GitHub code tree
GitHub 加速
Sourcegraph
Awesome Autocomplete for GitHub
File Icons for GitHub and GitLab
GitHub Isometric Contributions
Markdown Menu for GitHub
超级好用的前端开发测试Chrome插件 - WEB前端助手(FeHelper)
Maven插件
flatten-maven-plugin: 处理版本占位符
IDEA插件
JRebel 热加载插件
Grep Console
代码显示 CodeGlance
页面美化
Rainbow Brackets
Atom Material Icons
Java Stream Debugger (IDEA自带)
.ignore git忽略文件
SequenceDiagram 时序图
String Manipulation
一个比较实用的字符串转换工具,比如我们平时的变量命名可以一键转换驼峰 ...
工具-网站篇
网站篇
日常使用
临时邮箱
http://24mail.chacuo.net/
https://10minutesemail.net/
ChatGPT
https://poe.com/
https://chatguide.plexpt.com/
在线作图
https://www.processon.com/
https://online.visual-paradigm.com/drive/#infoart:proj=0&dashboard
https://asciiflow.com/#/
https://handraw.top/ 手绘风格的画图网站
https://app.diagrams.net/
BPMN流程图绘制
https://demo.bpmn.io/new
文件格式转换
https://smallpdf.com/cn
https://convertio.co/zh/
https://cloudconvert.com/
https://pdftoword.55.la/pdf2cad/
https://toepub.com/
https://compr ...
工具-实用工具篇
实用工具篇
OSS工具
rclone OSS同步工具
cyberduck OSS客户端
Java工具
JVM性能监控分析工具
arthas
Jconsole: jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用.对垃圾回收算法有很详细的跟踪.
JProfiler:商业软件,功能强大.
VisualVM:JDK自带,功能强大,与JProfiler类似.
MAT:MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具.
btrace
gperftools
classfinal
ClassFinal是一款java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework,可避免源码泄漏或字节码被反编译.
性能测试工具
ab(ApacheBench)
JMeter
stress
磁盘测试工具ezfio
nmon
MySQL工具
压测工具
mysqlslap
sysbench
命令行语法提示工具
mycli
沙箱
MySQL Sand ...
工具-编程框架篇
编程框架Java篇
数据库
数据库文档生成框架: screw
测试
造数据
easy-random
Java Faker
框架
JMH
参考文章: Java微基准测试框架JMH
Java Hamcrest
jcstress
The Java Concurrency Stress tests (jcstress) is an experimental harness and a suite of tests to aid the research in the correctness of concurrency support in the JVM, class libraries, and hardware.
单元覆盖率
JaCoCo
二维码
zxing
工具集
Hutool
Guava
ID
Hashids
OSS
Minio
默认用户ID 1001
模版语言
Velocity
Freemaker
Thymeleaf
表达式引擎
AviatorScript
Excel
easy-excel
Apache P ...
SpringBoot-扩展点
参考文献
SpringBoot—扩展接口
SpringBoot扩展点
ApplicationContextInitializer
BeanDefinitionRegistryPostProcessor
BeanFactoryPostProcessor
InstantiationAwareBeanPostProcessor
SmartInstantiationAwareBeanPostProcessor
BeanFactoryAware
ApplicationContextAwareProcessor
BeanNameAware
InitializingBean
FactoryBean
SmartInitializingSingleton
CommandLineRunner
DisposableBean
ApplicationListener
ApplicationContextInitializer
123456package org.springframework.context;@FunctionalInterfacepublic interface Application ...
Netty-实现基于WebSocket+Protobuf的消息推送系统
参考文献
项目结构
该项目主要分两个部分message-server和message-client
message-client: 基于Netty实现的WebSocket客户端,具有与message-server交互的功能.
message-server: 基于SpringBoot结合Netty实现的WebSocket服务端.
核心代码
消息格式定义
12345678910111213141516171819202122232425262728syntax = "proto3";package protocol;option optimize_for = SPEED;option java_package = "cn.holelin.messagepushnetty.protocol";option java_outer_classname = "MessageProtocol";// 消息格式message MessageProto{ // 消息的唯一Id可以用 UUID 表示 string mes ...
Netty(二)-Netty粘包半包
参考文献
粘包现象
粘包现象指的是发送方在一次发送中,将多个数据包粘在一起发送,接收方在接收数据时可能会将多个数据包看作一个数据包进行处理,导致数据解析错误的情况.这种现象通常出现在TCP协议中,由于TCP是面向流的协议,它会将应用层传递的数据流拆分成多个数据包进行传输,而接收方并不知道这些数据包的边界,因此可能会将多个数据包看作一个数据包进行处理.
发送 abc def,接收 abcdef
粘包产生的原因
应用层缓冲区:接收方 ByteBuf 设置太大(Netty 默认 1024),即数据包大小小于应用层缓冲区,多个数据包黏在一起.
滑动窗口:假设发送方 256 bytes 表示一个完整报文,但由于接收方处理不及时且窗口大小足够大,这 256 bytes 字节就会缓冲在接收方的滑动窗口中,当滑动窗口中缓冲了多个报文就会粘包
Nagle 算法:会造成粘包
发送方发送速率过快:如果发送方发送数据的速率过快,接收方可能无法及时处理所有的数据包,就会导致多个数据包被合并成一个数据包发送,从而产生粘包现象.
网络拥塞:如果网络拥塞,数据包的传输可能会受到阻碍,TCP协议为了减少网络传输的 ...
Netty-Netty编解码
参考文献
Netty实战
黑马Netty
什么是编解码器
每个网络应用程序都必须定义如何解析在两个节点之间来回传输的原始字节,以及如何将其和目标应用程序的数据格式做相互转换.这种转换逻辑由编解码器处理,编解码器由编码器和解码器组成,它们每种都可以将字节流从一种格式转换为另一种格式.
如果将消息看作是对于特定的应用程序具有具体含义的结构化的字节序列—它的数据.那么编码器是将消息转换为适合于传输的格式(最有可能的就是字节流);而对应的解码器则是将网络字节流转换回应用程序的消息格式.因此,编码器操作出站数据,而解码器处理入站数据
Netty编码器
Netty提供的编码器:
MessageToByteEncoder: 将指定类型的Java对象转换为ByteBuf对象,常用于自定义协议的编码.
ByteToMessageEncoder: 将ByteBuf对象转换为指定类型的Java对象,常用于自定义协议的解码.
MessageToMessageEncoder: 将一种类型的Java对象编码为另一种类型的Java对象,常用于协议转换或数据转换的场景
比较推荐的做法是使用 ...