RabbitMQ集群搭建

之前有一篇Rabbitmq安装教程记录了RabbitMQ单机版本的简单安装。本文主要记录RabbitMQ集群的搭建过程,方便以后开发调试。RabbitMQ集群有五种形成方式,包含通过在配置文件中列出集群节点以声明方式、以声明方式使用基于 DNS 的发现、以声明方式使用AWS (EC2) 实例发现(通过插件)、以声明方式使用Kubernetes 发现(通过插件)、以声明方式使用基于 Consul 的发现(通过插件)、以声明方式使用基于 etcd 的发现(通过插件)、手动使用rabbitmqctl。详细安装可查看RabbitMQ集群,本文通过Docker安装包含三个节点的RabbitMQ集群,并且通过手动使用rabbitmqctl的方式构建集群。

阅读更多

WebSocket长链接

项目中B端需要实时更新数据,这里记录下在SpringBoot下WebSocket长链接的开发过程。实时通知从最早的http轮训,然后到http1.1的Keep-Alive长链接机制,都是使用Request、Response机制。必须客户端主动发起请求,服务端才能响应。而WebSocket的机制是服务端可以主动向客户端推送消息。这种模式更加节约服务端资源,提高性能。

阅读更多

布隆过滤器使用

复习Java基础知识时看到布隆过滤器,本文记录布隆过滤器的使用场景及本地布隆过滤器,分布式布隆过滤器。布隆过滤器(Bloom Filter)是一个叫做 Bloom 的老哥于1970年提出的。我们可以把它看作由二进制向量(或者说位数组)和一系列随机映射函数(哈希函数)两部分组成的数据结构。相比于我们平时常用的的 List、Map 、Set 等数据结构,它占用空间更少并且效率更高,但是缺点是其返回的结果是概率性的,而不是非常准确的。理论情况下添加到集合中的元素越多,误报的可能性就越大。并且,存放在布隆过滤器的数据不容易删除。

阅读更多

生产环境跳板机搭建

生产环境的服务,中间件等一般不会开启公网访问,只能内网互通,保证数据的安全。所以一般我们我们预发布, 上线部署,查看日志等操作都需要跳板机进行操作。本文主要简单的记录跳板机的搭建及VPN连接过程。

阅读更多

优化CORS预检问题

近段时间PC端发布测试版本,使用webpack打包和gitlab runner自动化部署,然后使用nginx代理部署访问。测试过程中发现一个问题,每调用一个后台接口都会产生两次请求。我们以一次请求200ms计算,忽略前端渲染时间,本来200ms可以操作的界面需要400ms。并且本来可以一台服务器可以完成的工作非要两台服务器才能完成。这就比较严重了。本来文章记录一下这个问题的解决方案。

阅读更多

使用AbstractProcessor自动生成角色权限数据

项目开发中遇到一个关于RBAC中数据入库问题。权限主要包含页面权限,接口权限及数据权限。页面权限一般来讲是需要手动添加的,而接口权限则是通过swagger导入,或者手工录入,这样存在很多问题。比如接口书写不规范,运营看不懂。每次迭代,都需要手动角色绑定权限,这样人工错误率非常高。页面权限问题是没法解决的,但是我们可以解决接口权限问题。

阅读更多

Netty自带编解码器及自定义编解码器

上一篇文章Netty应用层处理粘包以及半包记录了使用Netty处理TCP粘包及半包。包含定长补齐,特殊字符分割,变长协议三种方案,并且使用了Netty自带的FixedLengthFrameDecoder定长解码器,StringDecoder字符串解码器,DelimiterBasedFrameDecoder特殊字符解码器,LengthFieldBasedFrameDecoder变长解码器LengthFieldPrepender编码器。本篇文章我们记录除了这些编解码器之外的Netty编解码器及自定义编解码器。针对Netty自带的编解码器,我们持续更新。

阅读更多

Netty应用层处理粘包以及半包

上一篇文章Netty初探记录了使用Netty开发Java NIO的过程,但是并没有处理TCP的粘包与半包。因为TCP是面向流的传输层协议,传输层并不处理粘包半包的任务,所以应用层必须处理粘包与半包的问题。本篇文章记录Netty处理粘包与半包。

阅读更多

Netty初探

上一章记录了Java NIO简单使用,其中提到了常见的几种IO多路复用模型,本章我们初试Netty,使用Netty写一个Netty客户端与服务端连接。简单的比较一下Java NIO与Netty NIO的区别。

阅读更多

Haproxy-Emqx-SSL实现负载均衡与加密

团队内部使用Docker+Haproxy+SSL+Emqx搭建MQTT集群,一直没搞成功。写篇文章记录下整个搭建过程,方便以后查询。主要使用的方案是通过Haproxy实现Emqx负载均衡,使用自建SSL保证数据安全,使用Docker保证快速搭建,迁移等。

阅读更多

NIO简单使用

之前总结了一篇BIO简单使用,BIO在长链接场景,一个连接占用一个线程。在短连接场景,虽然可以通过线程池优化,但是CPU会在不同的CPU不停的切换。因此BIO并不适用于高并发。Oracle在JDK1.4中引入了NIO的SDK,NIO与BIO不同之处在于NIO使用Linux中的IO多路复用技术。IO多路复用技术是将多个阻塞IO复用到同一个Selector阻塞上。本篇文章主要记录NIO的学习过程。

阅读更多

Gateway开发与调试隔离解决方案

使用Spring Cloud开发微服务应用时,开发阶段一般会是开发人员启动一个服务,服务器部署一个服务,这样一个实例会有多个服务并且分布在服务器和开发人员的地址,这样前端调试的时候可能会请求到我们开发人员自己的电脑,有时候还会导致结果不一致。本篇文章主要解决这个问题。

阅读更多

PVE显卡直通

公司购买一台AI训练机,准备用来做AI训练和CI,CD。拟规划在物理机上开启三个虚拟机,分别是AI训练Windows虚拟机,AI训练Linux虚拟机及CI虚拟机,本文记录从PVE的搭建,显卡直通的配置,驱动的安装等。方便有二次安装的时候不用去网上教程。整个安装配置过程中,显卡直通踩了很多坑。

阅读更多

emqx集群搭建及nginx负载均衡

项目中涉及物联网功能需要搭建mqtt服务。这里使用emqx搭建mqtt集群。为什么使用emqx呢?因为免费开源的mqtt集群没有比它做的更好的了,单机百万并发,友好的dashboard。之前做物联网项目也是用的这个中间件。这里就不再阐述了,有需要可以去官网查看。本文主要记录emqx的集群搭建及nginx负载均衡。

阅读更多

通过Sock5代理访问内网服务

项目初版进入测试阶段,需要发布1.0版本的中医系统,经理给了我两台云服务器,让我将应用服务和中间件部署在这两台服务器上,配置是4核16G内存5M小水管。内存太低已经没得商量,只能优化GC了。中间件也只能做伪集群。唯一能做的就是看看能否把所有公网IP的连接更改为内网IP,毕竟内网是G口。而且数据库也是内网的。因为连接公网IP很容易将下行拉满了。但是使用内网IP又不方便在上线前测试。所以想到了用代理的方式,所有的连接基于一台测试服代理访问内网服务。

阅读更多

AnnotationConfigApplicationContext解析

ApplicationContext接口负责实例化、配置和组装 bean,所谓Spring容器入口其实就是这个接口,代表着Spring IoC 容器的核心,ApplicationContext接口有很多实现方式,包括很早之前的ClassPathXmlApplicationContext,通过XML的方式装配bean,也包含了现在通过注解的方式AnnotationConfigApplicationContext。

阅读更多

MySQL脚本集

事情的起因是服务器硬盘差不多占满了,所以想着删除下磁盘,写个脚本定期删除下一些文件,这样子就不用定期手工删除文件了,不过搞着搞着就突然跑到MySQL去了,所以本篇文章内容只是作为笔记,方便后期查阅。文章主要内容包含快速查找大文件,查看磁盘占用情况,MySQL定时备份脚本,MySQL定时优化脚本。

阅读更多

记一次kdevtmpfsi挖矿事件

开发环境的应用服务器突然收到腾讯云的日志检测到存在未处理的木马文件,登录上应用服务器发现CPU一直被一个进程占用100%的状态,文章记录整个病毒处理过程。

阅读更多