自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Zookeeper(十一)服务端处理,客户端回调

服务端处理Watcher上面主要讲解了客户端注册Watcher的过程,并且已经了解了最终客户端并不会将Watcher对象真正传递到服务端。那么服务端究竟是如何完成客户端的Watcher注册,又是如何来处理这个Watcher的呢?后面我们围绕这两个问题讲解。ServerCnxn存储我们首先看下服务端接收Watcher并将其存储起来的过程,如图7-9所示是ZooKeeper服务端处理Wat

2017-03-26 15:38:26 3810

转载 Zookeeper(十)Watcher——数据变更的通知

我们前面提到,ZooKeeper提供了分布式数据的发布/订阅功能,一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能够让多个订阅者同时监听某一个主题对象,当这个主题对象自身状态变化时,会通知所有订阅者,使他们能够做出相应的处理。在ZooKeeper中,引入了Watchert机制来实现这种分布式的通知功能。ZooKeeper允许客户端向服务端注册一个Watcher监听,当服务端的一些事件触发

2017-03-02 23:29:02 12694

转载 Zookeeper(九)依赖于ZooKeeper的分布式消息系统Kafka

Kafka是知名社交网络公司LinkedIn于2010年12月份开源的分布式消息系统,主要由Scala语言开发,于2012年成为Apache顶级项目,目前被广泛应用在包括Twitter,Netffix和Tumblr等在内的大型互联网站点上。Kafka主要用于实现低延迟的发送和收集大量的事件和日志数据——这些数据通常都是活跃的数据通常都是活跃的数据。所谓活跃数据,在互联网大型的Web网站应用

2017-02-24 00:48:50 4873 1

转载 Zookeeper(八)开源客户端Curator的高级属性

到目前为止,我们已经知道如何使用Curator来创建会话,创建节点,删除节点,读取数据和更新数据等操作。值得一提的是,在前面都使用了Curator框架提供的同步接口,现在我们讲解如何通过Curator实现异步操作。Curator中引入了BackgroundCallback接口,用来处理异步接口调用之后服务端返回的结果信息,其接口定义如下。清单5-31public interface B

2017-02-20 22:14:56 1984 1

转载 Zookeeper(七)开源客户端

经过上面两节博客的介绍,朋友们应该会开始简单地使用ZooKeeper了。在这一偏文章中,我们将围绕ZkClient和Curator这两个开源的ZooKeeper客户端产品,再来进一步看看如何更好地使用ZooKeeper。ZkClientZkClient是Github上一个开源的Zookeeper客户端,是由Datameer的工程师StefanGroschupf和Peter Voss一起

2017-02-08 23:02:06 3065

转载 Zookeeper(五)Java客户端节点操作

使用同步API创建一个节点package book.chapterimport java.util.concurrent.CountDownLatch;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;i

2017-02-07 20:25:24 2103

转载 Zookeeper(四)Java客户端API使用

ZooKeeper作为一个分布式服务框架,主要用来解决分布式数据一致性问题,它提供了简单的分布式原语,并且对多种编程语言提供了API。下面我们重点来看下ZooKeeper的Java客户端API使用方式。

2017-02-05 21:09:39 2049 1

原创 自旋功能的实现

自旋功能很简单,实用,有许多人 却不知道使用。下面列举一例子,供参考public volitale boolean a = true; private boolean doSpin(){    while(a){        thread.sleep(1000);        a =  false;    }    return true;}

2017-01-19 21:11:34 1102

转载 Zookeeper(三)客户端脚本

我们来看下zkCli这个脚本。进入ZooKeeper的bin目录后,直接执行如下命令:$sh zkCli.sh当看到如下输出信息时,表示已经成功连接上本地的ZooKeeper服务器了。WatchedEvent state:SyncConnected type:Node path:null[zk:localhost:2181(CONNECTED)0]注意上面的命令没有显式地指定Z

2017-01-03 22:05:14 1320

转载 Zookeeper(二)ZooKeeper服务器的安装与启动

Zookeeper官方文档特别强调,由于FreeBSD系统的JVM对Java的NIO Selector支持的不是很好,所以不建议在该系统上部署生产环境的Zookeeper服务器。zookeeper使用1,下载Zookeeper安装包。下载地址为:http://zookeeper.apache.org/releases.html。注意用户可以选择稳定版本进行下载,下载后会得到一个文件名类

2016-12-28 22:58:09 10718

转载 Zookeeper(一)分布式事务

我们都知道普通的事务中有原子性,一致性,隔离性,持久性。而分布式事务中也有这些属性,下面我们就来介绍一下分布式事务与普通的事务有何不同之处。分布式事务随着分布式计算的发展,事务在分布式中也得到了广泛的应用。在单机数据库中,我们很容易能够实现桃满足ACID特性的事务处理系统,但在分布式数据库中,数据分散在各个不同的机器上,如何对这些数据进行分布式的事务处理具有非常大的挑战。分布式中会有机器宕

2016-12-26 21:27:12 11849

转载 Java动态代理与CGLIB

1. 静态代理模式因为需要对一些函数进行二次处理,或是某些函数不让外界知道时,可以使用代理模式,通过访问第三方,间接访问原函数的方式,达到以上目的,来看一下代理模式的类图:interface Hosee{    String sayhi();} class Hoseeimpl implements Hosee{

2016-12-23 16:38:23 561

原创 Spring消息(一)

Java消息服务(java Message Sevice,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间或分布式系统中发送消息,进行异步通信。Java消息服务时一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。java消息服务的规范包括两种消息模式,点对点和发布者/订阅者。许多提供商支持这一通用框架。因此,程序员可以在他们

2016-11-22 23:08:44 856

原创 可以看看的网址群

分布式理解:http://www.cnblogs.com/LBSer/p/4853234.html

2016-11-16 13:57:20 826

转载 AOP源码解析(五)获取代理

确定了使用哪种代理方式后便可以进行代理的创建了(1)JDK代理使用示例。创建业务接口,业务对外提供的接口,包含着业务可以对外提供的功能。

2016-11-07 23:59:06 883

转载 redis(六)redis消息拉取

消息拉取两个或多个客户端在互相发送和接受消息的时候,通常会使用以下两种方法来传递消息 。第一种方法被称为消息推送(push messaging),也就是由发送者来确保所有接收者已经成功接受到了消息。Redis内置了用于进行消息推送的PUBLISH命令和SUBSCRIBE命令。以前我们说过了这两个命令的缺陷。第二种方法被称为消息拉取(pull messaging),这种方法要求接收者

2016-11-02 09:53:13 2841

转载 AOP源码解析(四)寻找匹配的增强器

前面的函数中已经完成了所有增强器的解析,但是对于所有增强器来讲,并不一定都适用于当前的Bean,还要挑取除适合的增强器,也就是满足我们配置的通配符的增强器。具体的实现在findAdvisorsThatCanApply中。 public static List findAdvisorsThatCanApply(List candidateAdvisors, Class clazz) {

2016-11-01 23:12:32 793

转载 redis(五)redis任务队列

在处理Web客户端发送的命令请求时,某些操作的执行时间可能会比我们预期的更长一些,通过将待执行任务的相关信息放入队列里面,并在之后对队列进行处理,用户可以推迟执行那些需要一段时间才能能完成的操作,这种将工作交给任务处理器来执行的做法被称为任务队列(task queue)。现在有很多专门的任务队列软件(如ActiveMQ,RabbitMQ,Gearman,AmazoSQS,等等),另外在缺少专门的任

2016-11-01 11:50:43 4211

转载 AOP源码解析(三)增强器的获取

普通增强器的获取逻辑通过getAdvisor方法实现,实现步骤包括对切点的注解的获取及根据注解信息生成增强。 public Advisor getAdvisor(Method candidateAdviceMethod, MetadataAwareAspectInstanceFactory aif, int declarationOrderInAspect, String aspectN

2016-10-31 23:17:49 957

转载 AOP源码解析(二)创建AOP代理

上文中讲解了通过自定义配置完成了对AnnotationAwareAspectJAutoProxyCreator类型的自动注册,那么这个类到底做了什么工作来完成AOP的操作呢?首先我们看看AnnotationAwareAspectJAutoProxyCreator的层次结构public abstract class AbstractAdvisorAutoProxyCreator extends Ab

2016-10-31 22:09:31 834

转载 AOP源码解析(一)实现动态代理

动态AOP使用示例面向对象编程有一些弊端,当需要为多个不具有继承关系的对象引入同一个公共行为时,例如日志,安全检测等,我们只有在每个对象里引入公共行为,这样程序中就产生了大量的重复代码,所以有了面向对象编程的补充,面向切面编程(AOP'),AOP所关注的方向是横向的,不同于OOP的纵向。下面是一个AOP的示例(1)创建用于拦截的bean。在实际工作中,此bean可能是满足业务需要的核心

2016-10-30 23:27:49 2115

原创 redis构建分布式锁

分布式锁分布式锁是redis非常强大的功能,而且许多许多的公司都是采用redis的分布式锁,所以看好这一章,无论对你工作,还是面试都是有极大好处的。分布式锁也像一般锁一样可以“首先获取锁,然后执行操作,最后释放锁”动作,但这种锁既不是给同一个进程中的多个线程使用,也不是给同一台机器上的多个进程使用,而是由不通机器上的不通Redis客户端进行获取和释放的。何时使用以及是否使用

2016-10-28 14:20:20 1055

转载 远程服务HttpInvoker源码解析(五)客户端实现

客户端实现分析了服务端的解析以及处理后,我们接下来分析客户端的调用过程,在服务端调用的分析中我们反复提到需要从HttpServletRequest中提取从客户端传来的RemoteInvocation实例,然后进行相应解析。所以客户端,一个比较重要的任务就是构建RemoteInvocation实例,并传送到服务器。根据配置文件中的信息,我们还是首先确定HttpInvokerProxyFactor

2016-10-27 23:03:44 1351

原创 使用redis构建应用程序组件

1.构建两个前缀匹配自动补全程序2.通过构建分布式锁3.通过开发计数信号量来控制并发4.构建两个不同用途的任务队列5.通过消息拉取系统来实现延迟消息传递6.学习如何进行文件分发1.自动补全自动补全是一种能够让用户在不进行搜索的情况下,快速找到所需东西的技术。一个自动补全通过使用联系人列表来记录用户最近联系过的100个人,并尝试尽可能减少实现自动补全所需的内存

2016-10-27 19:52:39 664

转载 远程服务HttpInvoker源码解析(四)服务端实现

Spring开发小组意识到在RMI服务和基于HTTP的服务(如Hessian如Burlap)之间的空白。一方面,RMI使用Java标准的对象序列化,很难穿越防火墙;另一方面,Hessian/Burlap能很好地穿过防火墙工作,但使用自己私有的一套对象序列化机制。就这样,Spring的HttpInvoker应运而生。HttpInvoker是一个新的远程调用模型,作为Spring框架的一部分,来执

2016-10-26 22:03:55 1417

原创 redis的数据安全与性能保障

快照持久化方式:可以将存在于某一时刻的所有数据都写入硬盘里面。只追加文件:(append-only file,AOF),它会在执行写命令时,将被执行的写命令复制到硬盘里面。redis.conf参数配置:save 900 1, 900秒内有一次写入,存入快照save 300 10,300秒内有10次写入,存入快照save 60 10000,60秒内有10000此写入,

2016-10-26 19:30:57 1613

原创 jedis命令综合(2)

字符串的自增与自减命令INCR --将键存储的值加1DECR --将键存储的值减1incrby --将键存储的值加一个整数decrby --将键存储的值减一个整数incrbyfloat --将键存储的加上浮点数,这个命令在redis2.6以上可以用列表命令,Redis的列表允许用户从序列的两端推入或者弹出元素。blpop --从第一个非空列表中弹出位于最左侧的元

2016-10-25 14:21:25 618

转载 远程服务RMI源码解析(三)客户端实现

RMI客户端源码解析:根据客户端配置文件,锁定入口类为RMIProxyFactoryBean,客户端配置文件:<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" h

2016-10-23 20:55:30 2506

转载 远程服务RMI源码解析(二)

//初始化以及缓存到处的Object //此时通常情况下是使用RMIInvocationWrapper封装的JDK代理类,切面为RemoteInvocationTraceInterceptor exportedObject = getObjectToExport();        if(logger.isInfoEnabled())            logger.info(

2016-10-23 10:35:02 854

原创 redis之jedis命令综合

jedis.set("Hello", "worl");--插入值 System.out.println("hellor"+jedis.get("Hello"));--取值redis中的列表:rpush:将给定值推入列表的右端lrange:获取列表在给定范围上的所有值lindex:获取列表在给定位置上的单个元素lpop:从列表的左端弹出一个值,并返回被弹出的值jedi

2016-10-20 21:53:42 772

转载 远程服务RMI源码解析(一)

Java远程方法调用,即JavaRMI(Java Remote Method Invocation),是Java编程语言里一种用于实现远程过程调用的应用程序编程接口。它使客户机上的运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。RMI全部的宗旨就是尽可能地简化远程接口对象的使用。java RMI极大地依赖于接口。在需要创建一个远程对象时,程序员

2016-10-19 23:52:25 1723

原创 git常用命令

查看分支:git branch创建分支:git branch 切换分支:git checkout 创建+切换分支:git checkout -b 合并某分支到当前分支:git merge 删除分支:git branch -d 查看远程库信息,使用git remote -v;本地新建的分支如果不推送到

2016-10-14 09:45:59 412

原创 java web项目各个模块学习地址合集

myBatis学习:http://blog.csdn.net/techbirds_bao/article/details/9233599/git使用教程http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

2016-10-09 16:55:53 1312

转载 编译器优化

从Sun Javac的代码来看,编译过程大致可以分为三个过程,分别是:解析与填充符号表过程插入式注解处理器的注解处理过程分析与字节码生成过程在jdk中是通过javac将.java文件编译为.class文件。Javac编译动作的入口时com.sun.tools.javac.main.JavaCompiler类,上述三个过程的代码逻辑集中在这个类的compile()和compile2(

2016-08-09 21:21:16 1210

转载 java中volatile关键字的含义

在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制。 synchronized 同步块大家都比较熟悉,通过 synchronized 关键字来实现,所有加上synchronized

2016-08-08 21:12:49 553

转载 类加载及执行子系统的案例与实战

代码编译的结果从本地机器码转变为字节码是存储格式发展的一小步,却是编程语言发展的一大步。1.概述在Class文件与执行引擎这部分里,用户的程序能直接影响的内容兵不太多,Class文件以何种格式存储,类型何时加载,如何连接,以及虚拟机如何执行字节码指令等都是由虚拟机直接控制的行为,用户程序无法对其进行改变。能通过程序进行操作的,主要是字节码生成与类加载器这两部分的功能 ,但仅仅在如何如理

2016-08-08 19:22:58 2074 3

原创 虚拟机的类加载机制

1.概述我们知道Class文件中描述的各种信息,最终都需要加载到虚拟机中之后才能被运行和使用。而虚拟机如何加载这些Class文件?Class文件中的信息进入到虚拟机后会发生什么变化?这些都是后面讲到的重点。虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。与那些在编译时需要进行连

2016-07-29 21:56:18 837

转载 垃圾收集器,详解jdk参数配置

Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此,不同厂商,不同版本的虚拟机所提供的垃圾收集器都可能会有很大的差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。这里讨论的收集器基于Sun HotSpot虚拟机1.6版。如果两个收集器之间存在连线,就说明它们可以搭配使用。在介绍这些收集器各自的特性之前,我们先来明确一点:虽然我们是在对各

2016-07-26 11:35:50 1305

转载 SpringMVC(五)DispatcherServlet的逻辑处理

前面我们聊了关于Dispatcher逻辑处理大致步骤,下面我们进行详细的每个步骤分析MultipartContent类型的request处理对于请求的处理,Spring首先考虑的是对于Multipart的处理,如果是MultipartContent类型的request,则转换request为MultipartHttpServletRequest类型的request. protected H

2016-07-22 15:25:16 1514

转载 SpringMVC(四) DispatcherServlet的逻辑处理

HttpServlet提供了不同的服务方法,它们是doDelete(),doGet(),doOptions(),doPost(),doPut(),和doTrace(),它会根据不同的请求形式将程序引导至对应的函数进行处理。这几个函数中最常用的函数无非就是doGet()和doPost(),我们看看DispatcherServlet对着两个函数的逻辑实现。 @Override protected f

2016-07-21 19:52:03 1773

空空如也

空空如也

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

TA关注的人

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