自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(102)
  • 收藏
  • 关注

原创 Response 接口统一返回实体类

【代码】Response 接口统一返回实体类。

2023-07-18 16:35:53 524

原创 ElasticSearch 学习(一)-- 概念

Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。Elasticsearch 能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。

2022-10-26 22:39:12 735 1

原创 Netty 进阶学习(十一)-- 扩展与源码

1、第一次握手,client 发送 SYN 到 server ,状态修改为 SYN_SEND ,server 收到,状态改变为 SYN_REVD,并将该请求放入 sync queue 队列。2、第二次握手,server 回复 SYN + ACK 给 client,client 收到,状态改变为 ESTABLISHED ,并且发送 ACK 给 server。我们就来看看 netty 中对下面的代码是怎样进行处理的。属于 SocketChannel 参数。来设置大小(NIO 通过。Gson 需要的依赖。

2022-09-08 00:16:35 417

原创 Netty 进阶学习(十)-- 协议设计与解析

魔数,用来在第一时间判定是否是无效数据包版本号,可以支持协议的升级序列化算法,消息正文到底采用哪种序列化反序列化方式,可以有此扩展。如json、protobuf、hessian、jdk指令类型,是登录、注册、单聊、群聊…跟业务相关请求序号,为了双工通信,提供异步能力(不按顺序发送和接收)正文长度(解决粘包半包问题)消息正文(使用序列化算法,编码和解码,json、xml、对象流等)

2022-09-07 23:58:24 445

原创 Netty 进阶学习(九)-- 粘包与半包

链路层对一次能够发送的最大数据有限制,这个限制称之为 MTU(maximum transmission unit),不同的链路设备的 MTU 值也有所不同,例如。TCP 以一个段(segment)为单位,每发送一个段就需要进行一次确认应答(ack)处理,但如果这么做,缺点是包的往返时间越长性能就越差。消息边界就是分隔符,不再浪费空间,但是内容使用分隔符就需要进行转义,效率也不是很高。消息边界也就是固定长度,这种方式实现简单,但是空间有极大的浪费,不推荐使用。字节的数据,查看结果,存在接收到。

2022-09-07 23:49:53 320

原创 Netty学习(八)-- 练习

的双向信号传输,即时是阻塞 IO,读和写是可以同时进行的,只要分别采用读线程和写线程即可,读不会阻塞写、写也不会阻塞读。Java Socket 是全双工的,线路上存在。实现一个 echo Server。

2022-09-06 23:54:19 145

原创 Netty学习(七)-- ByteBuf

分析:(源码)

2022-09-06 23:51:39 436

原创 Netty学习(六)-- Handler & Pipeline

ChannelInboundHandlerAdapter 是按照 addLast 的顺序执行的,而 ChannelOutboundHandlerAdapter 是按照 addLast 的逆序执行的。每个 Channel 是一个产品的加工车间,Pipeline 是车间中的流水线,ChannelHandler 就是流水线上的各道工序,而后面要讲的 ByteBuf 是原材料,经过很多工序加工:先经过一道道入站工序,再经过一道道出站工序最终变成产品。

2022-09-06 23:48:22 187

原创 Netty学习(五)-- Future & Promise

首先要说明 Netty 中的 Future 与 JDK 中的 Future 同名,但是是两个接口,Netty 的 Future 继承自 JDK 的 Future,而 Promise 又对 Netty Future 进行了扩展。(return 结果)转到了U盘里,第二天拿给你。Future 是被动的,是由执行任务的那个线程往里面填结果。通过以上两个例子 Future 都是由提交任务时返回创建的,被动的拿到 Future。(另一个线程)带点学习资料给你,朋友说你有没有。(Future 对象),我给装过来。

2022-09-06 23:46:06 173

原创 Netty学习(四)-- Channel

思考下面的场景,4 个医生给人看病,每个病人花费 20 分钟,而且医生看病的过程中是以病人为单位的,一个病人看完了,才能看下一个病人。因此可以做如下优化,只有一开始,医生 2、3、4 分别要等待 5、10、15 分钟才能执行工作,但只要后续病人源源不断地来,他们就能够满负荷工作,并且处理病人的能力提高到了。的,执行该方法的是 NIO 的线程,main 线程代码会继续向下运行。而建立连接需要一定的时间,继续向下执行的获取 Channel 和 发送数据的代码就不符合逻辑了。方法建立连接,该方法是。

2022-09-06 23:44:19 347

原创 Netty学习(三)-- EventLoop

如前面例子中的 boss(只负责 ServerSocketChannel 上 accept 事件) 和 worker(只负责 SocketChannel 上的读写事件) 两个角色。方法来绑定其中一个 EventLoop,后续这个 Channel 上的 IO 事件都由此 EventLoop 来处理(保证了 IO 事件处理时的线程安全)可以看到两个工人(EventLoop )轮流处理 Channel,但 工人(EventLoop ) 与 Channel 之间进行了绑定。EventLoop 本质是一个。

2022-09-06 23:36:20 293

原创 Netty学习(二)-- 概述和初体验

Netty 是由 Trustin Lee 提供的一个 Java 开源框架,现为 GitHub 上的独立项目。Netty 是一个基于 NIO 的客户、服务器端的编程框架。Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端。

2022-09-06 22:48:01 691

原创 Netty学习(一)-- Netty 底层 Java NIO

Selector 的作用就是配合一个线程来管理多个 Channel 上发生的事件,获取这些 Channel 上发生的事件,这些 Channel 工作在非阻塞模式下,不会让线程吊死在一个 Channel 上。会阻塞直到 Channel 发生了读写事件,这些事件发生,select() 会返回这些事件交给 thread 来处理。1、Java 本身并不具备 IO 读写能力,因此 read 方法调用后,要从 java 程序的。阻塞的表现就是线程暂停了,暂停期间不会占用 CPU,但线程相当于闲置。

2022-09-06 00:03:00 319

原创 RabbitMQ 学习(九)-- RabbitMQ 集群

网络模式 # 子网 # 网关 # docker 网络名称 $ docker network create \ --driver bridge \ --subnet 192.170 .0.0/16 \ --gateway 192.170 .0.1 \ rabbitmqClusterNet # 查看 docker 网络 $ docker network ls。

2022-09-01 00:08:12 1535

原创 RabbitMQ 学习(八)-- 幂等性、优先队列、惰性队列

举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常, 此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱了,流水记录也变成了两条。消费者在消费 MQ 中的消息时,MQ 已把消息发送给消费者,消费者在给MQ 返回 ack 时网络中断, 故 MQ 未收到确认信息,该条消息会重新发给其他的消费者,或者在网络重连后再次发送给该消费者,但实际上该消费者已成功消费了该条消息,造成消费者消费了重复的消息。命令,天然具有幂等性。

2022-08-23 23:08:26 172

原创 RabbitMQ 学习(七)-- 高级发布确认

在生产环境中由于一些不明原因,导致 RabbitMQ 重启,在 RabbitMQ 重启期间生产者消息投递失败,导致消息丢失,需要手动处理和恢复。于是,我们开始思考,如何才能进行 RabbitMQ 的消息可靠投递呢?特别是在这样比较极端的情况,RabbitMQ 集群不可用的时候,无法投递的消息该如何处理呢?...

2022-08-12 00:13:35 691

原创 RabbitMQ 学习(六)-- 延迟队列

消息可靠发送、消息可靠投递、死信队列来保障消息至少被消费一次以及未被正 确处理的消息不会被丢弃。另外,通过 RabbitMQ 集群的特性,可以很好的解决单点故障问题,不会因为 单个节点挂掉导致延时队列不可用或者消息丢失。​ 当然,延时队列还有很多其它选择,比如利用 Java 的 DelayQueue,利用 Redis 的 zset,利用 Quartz 或者利用 kafka 的时间轮,这些方式各有特点,看需要适用的场景。...

2022-08-10 23:18:29 277

原创 RabbitMQ 学习(五)-- 死信队列

DLX,全称为 Dead Letter Exchanges , 可以称之为死信交换机,也有人称之为死信邮箱。当消息在一个队列中变成死信(dead message)之后,它能被重新发送到另一个交换机中,这个交换机就是 DLX ,绑定 DLX 的队列就称之为死信队列。应用场景: 为了保证订单业务的消息数据不丢失,需要使用到 RabbitMQ 的死信队列机制,当消息消费发生异常时,将消息投入死信队列中。还比如说: 用户在商城下单成功并点击去支付后在指定时间未支付时自动失效。消息变成死信的原因:消费者使用 或

2022-08-05 00:14:55 472

原创 RabbitMQ 学习(四)-- 交换机(发布/订阅、路由、主题模式)

交换机发布订阅模式:前面的学习每个任务都是都恰好交付给一个消费者(工作进程)。我们为了说明这种模式,我们将构建一个简单的日志系统。它将由两个程序组成:第一个程序将发出日志消息,第二个程序是消费者。其中我们会启动两个消费者,其中一个消费者接收到消息后把日志存储在磁盘,另外一个消费者接收到消息后把消息打印在屏幕上,事实上第一个程序发出的日志消息将。...

2022-08-03 23:47:20 1561

原创 RabbitMQ 学习(四)-- Publisher Confirms(发布确认模式)

一旦消息被投递到所有匹配的队列之后,broker就会发送一个确认给生产者(包含消息的唯一ID),这就使得生产者知道消息已经正确到达目的队列了,如果消息和队列是可持久化的,那么确认消息会在将消息写入磁盘之后发出,broker回传给生产者的确认消息中delivery-tag域包含了确认消息的序列号,此外broker也可以设置basic.ack的multiple域,表示到这个序列号之前的所有消息都已经得到了处理。,也就是发布一个消息之后只有它被确认发布,后续的消息才能继续发布。.........

2022-08-01 22:02:55 2031

原创 RabbitMQ 学习(三)-- Work Queues(工作模式)

工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成。相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。.........

2022-07-31 23:20:28 297

原创 RabbitMQ 学习(二)-- Hello World(简单模式)

在下图中,“P”是我们的生产者,“C”是我们的消费者。中间的框是一个队列-RabbitMQ代表使用者保留的消息缓冲区。

2022-07-31 23:10:42 148

原创 Java NIO 学习

JAVA NIO (New IO 也称之为 Non-Blocking IO) 是从 Java 1.4 版本开始引入的一个新的 IO API,可以代替标准的 Java IO API。NIO 与 原来的 IO 有同样的作用和目的,但是工作方式完全不一样:标准的 IO 基于字节流和字符流进行操作的;NIO 支持面向缓冲区(Buffer),基于通道(Channel)的 IO 操作,数据总是向通道读取到缓冲区中,或者从缓冲区中写入通道中。NIO 以更加高效的方式进行文件的读写操作。NIO 和传统 IO 之间第一个最大

2022-07-30 21:47:33 364

原创 RabbitMQ 学习(一)-- 概念和安装

RabbitMQ学习。

2022-07-27 00:17:34 196

转载 消息队列学习 -- 概念

在计算机科学领域,消息队列和邮箱都是软件工程组件,通常用于进程间或同一进程内的线程通信。它们通过队列来传递消息-传递控制信息或内容,群组通信系统提供类似的功能。消息队列(消息中间件)就是一个使用队列来通信的组件。......

2022-07-25 22:06:42 201

原创 SpringMVC 框架搭建

项目地址: GitHub3、编写配置文件3.1、context3.2、mvc3.3、jdbc3.4、mybatis3.5、security未配置3.6、web3.7、log

2022-07-24 23:37:41 179

原创 Docker 进阶学习笔记

在您的项目目录中创建一个名为versionwebbuild.ports-"8000image"redisalpine"web和redis。该web服务使用当前目录中的Dockerfile来构建镜像。然后它将容器和主机绑定到暴露的端口8000,此示例服务使用FlaskWeb服务器的默认端口5000redis该redis服务使用DockerHub的公共Redis镜像。...

2022-07-21 23:50:59 406

原创 Java 根据身份证号获取性别、年龄、出生日期等信息

获取sfz信息

2022-07-18 00:21:05 6881 3

原创 Docker 学习笔记(十三)-- SpringBoot 打包 Docker 镜像

文件名改为Dockerfile才能自动识别。在项目目录下新建DockerFile文件。编写controller测试。勾选SpringWeb。

2022-07-18 00:15:45 210

原创 Docker 学习笔记(十二)-- 部署Redis集群 实战

实战部署Redis集群清空容器。

2022-07-18 00:12:25 83

原创 Docker 学习笔记(十一)-- Docker 网络

虽然Docker提供的默认网络使用比较简单,但是为了保证各容器中应用的安全性,在实际开发中更推荐使用自定义的网络进行容器管理,以及启用容器名称到IP地址的自动DNS解析。从Docker1.10版本开始,dockerdaemon实现了一个内嵌的DNSserver,使容器可以直接通过容器名称通信。方法很简单,只要在创建容器时使用--name为容器命名即可。只能在user-defined网络中使用。自定义网络测试UsageOptions7.07.0总结–-link。.........

2022-07-18 00:07:19 564

原创 Docker 学习笔记(十)-- 镜像发布

如果您使用的机器位于VPC网络,请使用registry-vpc.cn-hangzhou.aliyuncs.com作为Registry的域名登录。从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。您可以在访问凭证页面修改凭证密码。在我们的服务器上提交自己的镜像。......

2022-07-17 23:57:50 274

原创 Docker 学习笔记(九)-- Dockerfile 构建Tomcat 实战测试

由于我们做了卷挂载,我们直接在宿主机的挂载目录编写项目就可以发布了。依赖的JDK压缩包[访问到Tomcat的首页。

2022-07-17 23:48:40 513

原创 Docker 学习笔记(八)-- Dockerfile 构建CentOS 实战测试

DockerHub中99%的镜像都是从这个基础镜像(Scratch)中安装和配置需要的软件和配置构建出来的!创建一个自己的CentOS编写3、通过这个文件构建镜像。

2022-07-17 23:43:29 546

原创 Docker 学习笔记(七)-- Docker DockerFile

Docker Dockerfile | 菜鸟教程 (runoob.com)Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。构建步骤:1、编写 DockerFile 文件2、docker build 构建镜像3、docker run 运行镜像4、docker push 发布镜像(DockerHub,阿里云镜像仓库)在 dockerHub 上搜索 centos,选个 tag点进去 ,就可以看到 DockerFile 文件了:sig-cloud-instance-

2022-07-11 23:58:14 552

原创 时间工具类

时间工具类

2022-07-06 22:30:28 73

原创 IP 工具类

IP工具类

2022-07-06 22:27:14 104

原创 Docker 学习笔记(六)-- 容器数据卷

docker的理念回顾:将应用和运行的环境一起打包形成一个镜像发布出去。存在问题:如果我们的数据都在容器中,那么我们把容器删除之后,数据就会丢失。假如有个MySQL容器,如果将这个容器删了,那存的数据也没有了。解决方案:所以我们想要数据持久化。我们需要**容器的持久化和同步操作,容器间也是可以数据共享的。**就出现了容器数据卷的技术,容器之间有一个数据共享的技术。docker容器产生的数据同步到本地。说白了就是目录的挂载,将我们容器的目录挂载到Linux上面。数据卷(Data Volumes)是宿主机中的一

2022-07-04 22:42:38 1208

原创 MyBatis 操作 PostgreSQL array数组类型

使用方式Java 实体类中mapper.xml 中SQL 语句中注意:如果想要把 postgreSQL 数据库表中的 数组字段的值映射到 Java 的 Pojo 对象中,必须使用 resultMap 标签来映射,否则此字段为 null。

2022-07-02 01:32:44 1909

原创 PostgreSQL varchar[] 数组类型操作

PostgreSQL varchar[] 数组类型操作:

2022-06-30 22:33:09 1334

空空如也

空空如也

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

TA关注的人

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