
Web Server
长河
为天地立心,为生民立命,为往圣继绝学,为万世开太平.
展开
-
基于NIO简单实现Netty
具体是过程如下:初始化两个线程池,boss负责链接,work负责连接的处理 初始化boss线程池大小为1 调用构造方法,进行赋值,调用Selector.open(); 获取当前线程池的selector 执行线程任务,分别是设置未连接的状态,查看是否已经有链接到来, 执行队列里的任务,处理selector中的内容,如果不为空就获取一个work线程,添加到work的任务队列中去 ...原创 2018-09-09 11:40:08 · 692 阅读 · 1 评论 -
利用Netty构建自定义协议的通信
在复杂的网络世界中,各种应用之间通信需要依赖各种各样的协议,比如:HTTP,Telnet,FTP,SMTP等等。在开发过程中,有时候我们需要构建一些适应自己业务的应用层协议,Netty作为一个非常优秀的网络通信框架,可以帮助我们完成自定义协议的通信。一般而言,我们制定的协议需要两个部分:Header : 协议头部,放置一些Meta信息。 Content : 应用之间交互的信息主体。...原创 2019-08-01 11:06:39 · 754 阅读 · 0 评论 -
spring自定义定时任务- @Scheduled注解
新建一个定时任务的配置类, 从数据库中读取配置的定时任务,把配置的每一个定时任务注入到系统中,package com.td.analytics.task;import com.td.analytics.entity.JobEntity;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.原创 2021-12-01 13:49:38 · 3759 阅读 · 0 评论 -
xxl-job分布式任务调度的使用
为什么我们需要定时任务很多业务场景需要我们某一特定的时刻去做某件任务,定时任务解决的就是这种业务场景。一般来说,系统可以使用消息传递代替部分定时任务,两者有很多相似之处,可以相互替换场景。如,上面发货成功发短信通知客户的业务场景,我们可以在发货成功后发送MQ消息到队列,然后去消费mq消息,发送短信。但在某些场景下不能互换:a)时间驱动/事件驱动:内部系统一般可以通过时间来驱动,但...原创 2019-11-06 11:56:10 · 2825 阅读 · 3 评论 -
Springboot启用 HTTPS 加密网站
1. 获取 HTTPS 证书正常情况下 HTTPS 证书需要从证书授权中心获得,这样获得的证书才具有公信力,也会被各种浏览器客户端所认可。常见的证书品牌如 Symantec,GeoTrustm,TrustAsia,Symantec 等。不过在 Springboot 的 HTTPS 实验中就没有必要去申请了,我们可以使用 Java 自带的 keytool 生成 HTTPS 证书。查看 key...原创 2020-01-02 09:29:25 · 1447 阅读 · 4 评论 -
常见分布式全局唯一ID生成策略及算法的对比
全局唯一的 ID 几乎是所有系统都会遇到的刚需。这个 id 在搜索, 存储数据, 加快检索速度 等等很多方面都有着重要的意义。工业上有多种策略来获取这个全局唯一的id,针对常见的几种场景,我在这里进行简单的总结和对比。简单分析一下需求 [1]所谓全局唯一的 id 其实往往对应是生成唯一记录标识的业务需求。这个 id 常常是数据库的主键,数据库上会建立聚集索引(cluster index...转载 2018-03-31 09:30:49 · 30045 阅读 · 7 评论 -
RabbitMQ入门教程(概念,应用场景,安装,使用)
RabbitMQ 简介RabbitMQ是一个在AMQP(Advanced Message Queuing Protocol )基础上实现的,可复用的企业消息系统。它可以用于大型软件系统各个模块之间的高效通信,支持高并发,支持可扩展。AMQPAMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个...转载 2018-11-16 12:03:30 · 1523 阅读 · 0 评论 -
java模块化实践(基于jdk11)-1
出现一个新的东西必然是解决以前的问题, 要不然他就不需要出现了....今天来说下模块化模块化之前出现的问题:Java运行环境的膨胀和臃肿。每次JVM启动的时候,至少会有30~60MB的内存加载,主要原因是JVM需要加载rt.jar,不管其中的类是否被classloader加载,第一步整个jar都会被JVM加载到内存当中去(而模块化可以根据模块的需要加载程序运行需要的class) 当代码库...原创 2019-09-03 15:28:22 · 8399 阅读 · 2 评论 -
java模块化实战(基于jdk11)-2
续接上文,上文中简单的使用了模块化, 没有使用maven, 我们也知道maven也是构建项目用的,而且现在的项目不适用maven/gradle 来构建项目, 进行jar包的管理,那才真是灾难.所以我们需要一个maven的例子来说明怎么使用模块化 ,maven和模块化并没有什么冲突.此文章的例子是基于上一篇的代码,基本上就是复制过来了....你问为啥, 真是个好问题, 因为懒(本文的重点...原创 2019-09-03 15:28:31 · 1252 阅读 · 0 评论 -
windows下执行maven自动化脚本命令
现在我的需求是,在修改了代码之后,清理已经存在的jar包,然后重新package一个jar 包出来,再进行启动.以前都是手动执行maven命令,因为也知道window上脚本没有linux上方便.这要是在linux下开发,就不用写这篇博客了,现在大家知道window和linux的区别了吧还是百度了下windown 的 bat脚本的语法,然后写出来一个实际可用的脚本出来,文件以.bat或者.cm...原创 2019-07-22 17:42:13 · 3563 阅读 · 0 评论 -
常用的jps命令
1. 列出PID和Java主类名jps2017 Bootstrap2576 Jps2. 列出pid和java完整主类名jps -l2017 org.apache.catalina.startup.Bootstrap2612 sun.tools.jps.Jps3. 列出pid、主类全称和应用程序参数jps -lm2017 org.apache.cata...转载 2019-03-14 14:03:27 · 825 阅读 · 0 评论 -
linux日常使用命令合集
最近公司的业务闲了下来,所以直接在看书,看视频进行学习的.感谢公司给出的时间首先看的韩顺平的一周学会linux,这个人的讲的蛮好的,他的视野很宽阔,虽然是很久以前的视频了,但是讲的蛮好的.所以特地的结合自己的工作总结了一些日常使用的linux命令,给大家分享.pwd 当前目录的路径ls -a 显示隐藏文件ls -l h* 显示所有以h开头的文件ls -d b* 显示所有...原创 2017-10-12 15:54:29 · 542 阅读 · 0 评论 -
Centos7安装Docker
以前都是玩虚拟机的,最近看了下docker虚拟化技术,感觉docker就是轻量级的虚拟机,只是和虚拟机又不同,更加的方便的进行服务的部署了.提高机器的利用率.同时做到了应用的隔离.不会互相的影响.好了,多的不说,我们先进行centos上的docker的安装直接通过yum安装即可:yum install -y docker安装完成之后使用docker version 进行是否安装...原创 2018-08-07 19:02:30 · 167 阅读 · 0 评论 -
telnet使用
telnet在一些测试上还是很方便的.window的使用,需要手动开启,勾选上就行了.进入telnet命令行即可进入问题:Telnet连接到主机后输入命令,只有一个小短横,没有字母显示解决:按下 ctrl + ]使用帮助查看常用命令:使用open 127.0.0.1 8080 进行主机的链接链接主机也可以在黑窗...原创 2018-08-16 17:22:28 · 10669 阅读 · 0 评论 -
Nacos入门
试验配置的管理,和服务的发现,很简单的入门级案例.在本机安装完nacos后,直接新建一个springboot项目,进行整合,添加依赖,添加代码,使用postman进行访问具体的请参考网址: https://nacos.io/zh-cn/docs/quick-start.html 不得不说他们的文档和步骤写的非常好,一步一步的下来,直接就成功了.确实得到了配置管理的获取和服务发现...原创 2018-11-28 16:09:08 · 1292 阅读 · 3 评论 -
shell循环ubuntu踩坑
因为前段时间在win10 下面安装了linux子系统,使用的是Ubuntu18.04 ,然后就开始学习shell了,写了一个shell 的for循环,如下:#!/bin/bash for ((i=1; i<=10; i++))do echo $idone 就是这么简单的代码,循环输出变量,但是在Ubuntu下面,怎么运行,都报loop 循环错误,最...原创 2018-12-03 09:48:23 · 676 阅读 · 0 评论 -
Restful类型的返回结果的封装
之所以需要对结果进行固定格式的封装,是为了让前端更好的接受和处理结果.对数据进行展示.只需要进行两部操作就够了,封装起来很简单.1.进行最终结果的封装:/** * 输出结果的封装 * 只要get不要set,进行更好的封装 * @param <T> */public class Result<T> { private int code; ...原创 2018-12-04 09:48:16 · 6719 阅读 · 0 评论 -
UML建模图实战笔记
UML:Unified Modeling Language(统一建模语言),使用UML进行建模的作用有哪些:可以更好的理解问题 可以及早的发现错误或者被遗漏的点 可以更加方便的进行组员之间的沟通 支持面向对象软件开发建模,可以更好的描述显示编程的情景。 对于复杂的系统来说,如果概要模型做的好,那么整个系统的模型也就很清晰明了。这里推荐大家使用的UML软件是rose2007 或者使用...原创 2018-12-10 09:51:40 · 975 阅读 · 0 评论 -
servlet底层原理,实现方式,生命周期
Servlet简介Servlet定义Servlet是一个Java应用程序,运行在服务器端,用来处理客户端请求并作出响应的程序。Servlet的特点(1)Servlet对像,由Servlet容器(Tomcat)创建。(2)Servlet是一个接口:位于javax.servlet包中。(3)service方法用于接收用户的请求并返回响应。(4)用户访问时多次被执行(...转载 2019-04-11 14:44:28 · 1398 阅读 · 0 评论 -
使用 Artifactory 搭建 Maven 私服
知道这个Artifactory 是因为一个朋友想了解下Artifactory 这个东西,问我怎么建立自己本地的jar包库,然后就花了几个小时研究了一下,发现也是蛮简单的,只需要运行起来,修改下配置就可以把jar包上传到这里面的去了,就可以直接进行依赖了,而不是把工程导出jar包,到处的复制,粘贴的.好了,以下是正文:1.首先是安装jfrog-artifactory-oss-6.8.4.zi...原创 2019-03-07 10:25:28 · 2365 阅读 · 0 评论 -
生产系统更新问题记录及反思
其实这篇文章的草稿是以前在上海的一家公司的时候写完了的, 一直没有发出来, 本应该在17年就发出来的.这次看到在回收站里面就拉出来, 修改了一下,就发出来了.今天周四晚上又在更新一个新项目的正式服务器的版本,过程曲折, 幸运的是最后更新好了, 所以写下来记录一下.确保以后不再出现同样的问题,不贰过.第一准备的不够充分,我在上午就在测试服上打好了版本,让测试和安卓看看...原创 2019-08-09 15:38:53 · 271 阅读 · 1 评论