- 博客(24)
- 资源 (4)
- 收藏
- 关注
原创 mac更新node,npm版本失败的问题
最近开发发现node版本多低的提示,于是升级一下# 清除node.js的cache:$ sudo npm cache clean -f# 安装 n 工具,专门用来管理node.js版本的工具$ sudo npm install -g n# 安装最新版本的node.js$ sudo n stable# 安装最新版本的npm$ sudo npm install npm@latest -g# 安装成功查看当前版本$ node -v$ npm -v...
2020-06-03 16:46:18 1637
原创 分布式锁实现方法
场景有两台client1和client2 并发的修改一个user表的数据,如果是数据库集群,client1 要修改user1的金额为20,client2要在20的基础上再加30,也就是要得到money=50的结果,这时如果没有分布式锁,可能出现的结果就是client1修改成功,数据库集群同步为20 ,之后client2修改成功 集群整体修改为money=30分布式锁的要求提供阻塞和非阻塞...
2020-03-13 14:19:07 156
转载 RocketMQ源码解析(三)-Producer
发送方式producer发送消息支持3种方式,同步、异步和Oneway。同步发送:客户端提交消息到broker后会等待返回结果,相对来说是最常用的方式。异步发送:调用发送接口时会注册一个callback类,发送线程继续其它业务逻辑,producer在收到broker结果后回调。比较适合不想发送结果影响正常业务逻辑的情况。Oneway:Producer提交消息后,无论broker是否正常接收...
2020-03-07 18:39:31 245
转载 RocketMQ源码解析(二)-nameserv
NameServ是rocketMQ的注册中心,保存所有Broker、Topic的元数据。Broker启动后会向nameserv发送心跳,nameserv也会定时检测broker的可用性,并移除不可用的broker。Nameserv的启动> nohup sh bin/mqnamesrv &nameserv启动过程会将所有初始化和启动工作交给NamesrvController来完...
2020-03-07 18:03:45 205
转载 RocketMQ源码解析(一)-架构原理
RocketMQ是阿里开源的分布式消息中间件,在阿里云上有它的商业版本ONS,类似的开源消息中间件还有Kafka, ActiveMQ等。跟其它中间件相比,rocketMQ的特点是纯JAVA实现;集群和HA实现相对简单;跟kafka相比吞吐率稍低,但是在保持一定的吞吐情况下,在发生宕机和其它故障时消息丢失率更低。后面几篇文章会对照源码来讲RocketMQ的实现原理。基本概念Message代表...
2020-03-07 16:00:54 334
原创 RocketMQ理解(顺序消费)
1.场景分析顺序消费是指消息的产生顺序和消费顺序相同假设有个下单场景,每个阶段需要发邮件通知用户订单状态变化。用户付款完成时系统给用户发送订单已付款邮件,订单已发货时给用户发送订单已发货邮件,订单完成时给用户发送订单已完成邮件。发送邮件的操作为了不阻塞订单主流程,可以通过mq消息来解耦,下游邮件服务器收到mq消息后发送具体邮件,已付款邮件、已发货邮件、订单已完成邮件这三个消息,下游的邮件服务...
2020-03-05 20:36:55 724
原创 RocketMQ入门
1.1. 简介RocketMQ 是一款分布式、队列模型的消息中间件,具有以下特点:能够保证严格的消息顺序提供丰富的消息拉取模式高效的订阅者水平扩展能力实时的消息订阅机制亿级消息堆积能力选用理由:强调集群无单点,可扩展,任意一点高可用,水平可扩展。 海量消息堆积能力,消息堆积后,写入低延迟。支持上万个队列消息失败重试机制消息可查询开源社区活跃成熟度(经过双十一考验)...
2020-03-04 23:05:50 142
原创 ActiveMQ与Zookeeper实现集群策略具体实现
一 .官方文档使用ZooKeeper实现的Master- Slave实现方式,是对ActiveMQ进行高可用的一种有效的解决方案,高可用的原 理:使用ZooKeeper(集群)注册所有的ActiveMQ Broker。只有其中的一个Broker可以对外提供服务(也就是Master节点),其 他的Broker处于待机状态,被视为Slave。如果Master因故障而不能提供服务, 则利用ZooKee...
2020-03-03 15:58:09 401
原创 Activemq理解与应用
如果一个系统本来需要承担5个复杂任务,应用mq的机制,将消息先存储在mq上,通过mq来分发给其他的机器,整体提高了系统的承载能力.类似于负载均衡的道理,下面分享几个activemq的典型应用1. ActiveMQ实现邮件1.添加ActiveMQ依赖...
2020-03-03 10:57:31 166
原创 Redis集群策略
一、Redis的高可用策略(主从策略)1. 基本概念高可用(High Availability),是当一台服务器停止服务后对于业务及用户毫无影响。 停止服务的原因可能由于网卡、路由器、机房、CPU负载过高、内存溢出、自然灾害等不可预期的原因导致,在很多时候也称单点问题。主备方式(简单情景)这种通常是一台主机、一台或多台备机,在正常情况下主机对外提供服务,并把数据同步到备机,当主机...
2020-02-28 13:20:00 588
原创 Redis持久化
redis的 rdb 和 aof 持久化的区别aof,rdb是两种 redis持久化的机制。用于crash后,redis的恢复。1.两种持久化机制的特性rdb的特性如下:fork一个进程,遍历hash table,利用copy on write,把整个db dump保存下来。save, shutdown, slave 命令会触发这个操作。粒度比较大,如果save, shutdown, ...
2020-02-28 12:54:02 165
原创 Java虚拟机
类加载子系统:负责加载class文件,加载的信息放在方法区中方法区:存放类信息,常量信息等Java堆:在Java虚拟机启动时 建立Java堆,它是Java程序最主要的内存工作区域,几乎所有的对象实例都放在堆中,堆空间是所有线程共享的.直接内存:Java的Nio允许Java程序直接使用内存,从而提高性能.通常直接内存速度会优于Java堆.读写频繁的场合可能会考虑使用每个虚拟机线程都有一个私...
2020-02-27 21:53:54 212 1
转载 Netty实践场景(二) 心跳检测机制
本文中我们将要实现的心跳检测逻辑是这样的:服务端启动后,等待客户端连接,客户端连接之后,向服务端发送消息。如果客户端在“干活”那么服务端必定会收到数据,如果客户端“闲下来了”那么服务端就接收不到这个客户端的消息,既然客户端闲下来了,不干事,那么何必浪费连接资源呢?所以服务端检测到一定时间内客户端不活跃的时候,将客户端连接关闭。本文要实现的逻辑步骤为:启动服务端,启动客户端客户端向服务端发送"...
2020-02-27 10:52:38 163
原创 Netty实践场景(一) 数据通信
我们需要考虑的问题是两台或多台机器使用Netty应该怎样通信,大致分为三种类型:第一种,使用长连接通道不断开,如果服务器的性能较好且用户不多的情况推荐使用一次性批量提交数据,采用短连接的方式,也就是我们会把数据保存在本地临时缓冲区或者临时表里面,界当达到临值时进行一次批量提交,又或者根据定时任务定时提交,这种方式的弊端 是做不到实时传送数据第三种,我们可以使用一种特殊的长连接,可以设置一个...
2020-02-26 22:25:36 150
原创 Netty之编解码技术
编解码技术,说白了就是java序列化技术,序列化目的就两个,第一进行网络传输,第二进行对象的持久化.虽然我们可以使用Java进行对象序列化,netty去传输,但是Java序列化的硬伤太多,比如Java序列化没办法跨语言,序列化后码流太大,序列化性能太低等等…主流的编解码框架:jboss的Marshalling包google的Protobuf基于Protobuf的KyroMessageP...
2020-02-26 21:06:36 173
原创 Netty解决TCP拆包粘包的问题(二)
server端代码b.group(bossGroup, workerGroup) //我要指定使用NioServerSocketChannel这种类型的通道 .channel(NioServerSocketChannel.class) //一定要使用 childHandler 去绑定具体的 事件处理器 .childHandler(new ChannelInitializer&...
2020-02-26 19:52:00 95
原创 Netty解决TCP拆包粘包的问题(一)
一个小的Socket Buffer问题在基于流的传输里比如TCP/IP,接收到的数据会先被存储到一个socket接收缓冲里。不幸的是,基于流的传输并不是一个数据包队列,而是一个字节队列。即使你发送了2个独立的数据包,操作系统也不会作为2个消息处理而仅仅是作为一连串的字节而言。因此这是不能保证你远程写入的数据就会准确地读取。举个例子,让我们假设操作系统的TCP/TP协议栈已经接收了3个数据包:...
2020-02-26 19:29:11 237
原创 Netty实现通信的步骤及代码
1.创建两个NIO线程组,一个专用于网络事件处理(接受客户端的连接),另一个 则进行网络通信的读写2.创建一个ServerBootstrap对象,设置Netty的一系列参数,例如接受传输数据的缓存大小等3.创建一个实际处理数据的类ChannelInitializer,进行初始化准备工作,设置接受数据的字符集,格式,已实际处理数据的接口4.绑定端口,执行同步阻塞方法等待服务器端启动...
2020-02-26 12:24:55 552
原创 NIO通信步骤
1.创建ServerSocketChannel, 并为其配置阻塞模式.2.绑定监听,配置TCP参数,录入backlog大小等3.创建独立的IO线程,用于轮训多路复用器selector.4.创建Selector,将之前创建的ServerSocketChannel注册到Selector上,并设置监听标示位SelectionKey.ACCEPT5.启动IO线程,在循环体中执行Selector.s...
2020-02-25 21:07:26 233
原创 master-worker模式
如图所示Master-Worker的工作机制就是Master接收到了一个任务,对任务进行拆分,并且分配给各个Worker,让各个Worker之间各自运行各自的子任务,最后Worker们的返回结果交给Master进行汇总并且最后返回给任务的发起方.Master-Worker是一种并行模式,Master是主要进程,Master中有维护着一个Worker进程队列.Master把一个大的而且复杂的业务拆...
2020-01-17 16:35:19 841
原创 java中脏读的概念
有一个线程设置值需要的时间为两秒钟,第二个线程拿值需要一秒钟,这样就可能出现脏读代码如下:package qun.com;/** * 有一个线程设置值需要的时间为两秒钟,第二个线程拿值需要一秒钟,这样就可能出现脏读 * 所以在setvalue 和getvalue上都加上锁 这是同一把锁 第二个线程只能排队 * oracle数据库有一致性读的特性,如果在某个时间发起的读请求,拿到的一定...
2020-01-17 16:32:50 734
原创 静态方法上加锁synchronized
关键字sychronized获得的锁都是对象锁,而不是代码块的锁.所以代码中哪个线程先执行sychronized关键字的方法,哪个线程就持有这把锁在静态方法上加锁synchronized 表示锁定.class类 类级别锁public class MultiThread { private static int num = 0; /**不加static * 这样线程获得m1和m...
2020-01-17 16:31:26 1349
原创 线程基础(一)
当多个线程访问mythread的run方法时.以排队的方式进行处理(这里排队顺序时cpu排队顺序) 一个线程想要执行sychronized代码体修饰的方法里面的代码:1. 获得锁 2.拿不到锁 这个线程会不断的拿锁,直到拿到为止 而且是多个线程一起拿锁,这就是锁竞争问题 在线程多的情况下会导致cpu过载 不加锁打印结果 当前线程名称: t2 当前 count 值 = 3 ...
2020-01-17 16:30:14 53
转载 字符串常量加锁的正确写法
字符串常量加锁错误的写法static private final String LOCK = "LOCK"; void testMethod() { synchronized(LOCK) { ... } }正确的写法static private final Object LOCK = new Object();void testMethod() {sy...
2020-01-17 16:26:30 592
SocketIO_03.rar
2020-02-26
DJG2430702851-TongFuDocumentProject-master.zip
2019-05-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人