- 博客(49)
- 问答 (1)
- 收藏
- 关注
原创 Disconf原理解析
1. 介绍 Disconf是一套完整的基于zookeeper的分布式配置统一解决方案。它支持配置(配置项+配置文件)的分布式化管理。2. 安装 依赖Mysql, Tomcat, Nginx, Zookeeeper, Redis。 路径配置: 将你的配置文件放到此地址目录下(以下地址可自行设定):[code="java"]/home/work/dsp/disc...
2017-04-27 11:57:04
1613
原创 RocketMQ原理解析-Broker处理发送消息
1. 简介 Producer发送一条消息到broker后,如何存储到commitlog文件,又是如何构建的consumequeue,index文件,将从源码的角度剖析。2. SendMessageProcessor 该类是负责响应Producer发消息到broker的入口处理逻辑类。其processRequest响应两种请求:[list][*]CONSUMER_SEND...
2017-04-20 10:49:56
706
原创 RocketMQ原理解析-Consumer
1. 介绍 Consumer默认使用DefaultMQPushConsumerImpl长轮询拉消息的方式来消费,可以保证实时性同Push一样。还可以参考example项目,使用DefaultMQPullConsumerImpl,由业务控制如果拉消息,更新消费进度等方式。2. 集群模式VS广播模式 集群模式: [list][*]消息的消费进度,即consumerOffse...
2017-04-14 13:46:11
444
原创 RocketMQ原理解析-Producer
[size=medium]1.启动[/size] producer通过配置的namesrv列表,启动时随机选择一个进行相连。首先引出,设置namesrv的几种方式,优先级依次由高到低:[list][*]第一种:代码中指定namesrv地址 producer.setNamesrvAddr(namesrvAddr); consumer.setNamesrv...
2017-04-14 13:46:00
257
原创 RocketMQ原理解析-HA
1. 介绍 当broker为slave且有master的情况下,通过HAService,slave从master同步commitlog数据,并通过ReputMessageService异步构建consumequeue。通过SlaveSynchronize定时每分钟从master同步config目录下的四个文件。默认,master监听broker端口+1。2. 启动 slave可...
2017-04-13 10:01:44
481
原创 RocketMQ原理解析-Broker
1. 部署方式 Broker可部署为2m-2s-async, 2m-2s-sync, 2m-noslave。推荐的部署方式为1.2. 文件结构[img]http://dl2.iteye.com/upload/attachment/0124/2543/0a7723f7-45f2-31b2-95a7-e1b48d489744.png[/img] abort:broker...
2017-04-13 10:00:52
287
原创 RocketMQ原理解析-Name Server
1. 介绍 Namesrv的功能,就相当于RPC中的注册中心。对于MQ而言,broker启动,将自身创建的topic等信息注册到Namesrv上。consumer和producer需要配置namesrv的地址,启动后,首先和namesrv建立长连接,并获取相应的topic信息(比如,哪些broker有topic路由信息),然后再和broker建立长连接。Namesrv本身无状态,可集群部...
2017-04-13 10:00:14
229
原创 RocketMQ原理解析-Setup
[size=medium]1. 下载[/size] https://github.com/alibaba/RocketMQ.git 下载后,运行install.sh或install.bat会在target目录下产生alibaba-rocketmq-broker.tar.gz(如果编译过程出现checkstyle不通过,注释掉pom文件的checkstyle plugin),然后...
2017-04-13 09:59:03
158
原创 RocketMQ原理解析-Index
[size=medium]1. 介绍[/size] 索引文件指,发送一条消息后,MQ通过(topic和uniqKey)或(topic和keys)构建的索引,然后通过queryMsgByKey可以查询到结果。注意,通过queryMsgById的查询,不是索引查询。索引文件存在于/store/index/文件夹下,以时间戳命名,如20151209213520685。每个索引文件,默认存储2000...
2017-04-13 09:56:46
284
原创 Shiro Filters
1. Overview 对于web应用,Shiro提供了认证和授权的过滤器实现。2. Architecture[img]http://dl.iteye.com/upload/attachment/0083/9506/b022d723-8c47-3c5b-98d4-87d210448a4c.jpg[/img] a. ServletContextSupport 提供了对Se...
2013-05-06 14:07:56
203
原创 Spring Quartz
1. Overview 为了降低使用Quartz的难度,并能以Spring风格的方式使用Quartz,Spring为Quartz提供了Scheduler, Trigger, JobDetail的FactoryBean类,以及一些工具类,使Quartz能很好的注入容器,并可以结合Spring容器的生命周期,启动和关闭job。2. JobDetailBean 使用JobDetail...
2013-04-29 16:21:56
224
原创 Introduction to Quartz(2)
7 JobStore Quartz 为所有类型的 Job 存储提供了一个接口。这个接口位于 org.quartz.spi 包中,叫做 JobStore。JobStore 用于对 Job、Trigger、Calendar、Listener和 Scheduler 状态进行存储。Quartz使用者通常不用直接访问JobStore接口的方法,它们在运行时被Scheduler访问。如果按照存储类型分类...
2013-04-29 16:21:31
132
原创 Introduction to Quartz(1)
1 Overview Quartz是一个开源的作业调度框架,可被集成到任何的Java EE 或者Java SE程序中。 2 Scheduler 通过SchedulerFactory接口创建Scheduler对象。当 Scheduler 实例被创建之后,就会被保存到一个仓库中(org.quartz.impl.SchedulerRepository)。Scheduler对象可以被s...
2013-04-29 16:21:10
137
原创 Shiro Example
1. 说明: maven项目,基于Spring3.1,MyBatis3.1,Shiro1.1,EHCache2.2。 项目的sql目录下的init_schema.sql文件为数据库脚本,例子中使用SQLServer。如果使用MySQL,只需将pom.xml中的MySQL依赖打开,然后修改db.properties文件,将配置改为MySQL即可。如果你不想使用数据库,将main_conf...
2013-04-23 16:11:05
153
原创 Shiro User Manual-Command Line Hasher
1. Overview Shiro1.2及其以后版本,可以通过命令行对字符串和任何类型的资源进行哈希操作。2. Usage 下载shiro-tools-hasher-version-cli.jar,如果是通过原文件编译或Maven下载的Shiro,进入buildroot/tools/hasher/target目录,然后执行:[code="java"]java -jar sh...
2013-04-19 11:49:03
183
原创 Shiro User Manual-Integrating Into Spring
1. Overview Shiro的JavaBeans兼容性使其可以很容易的配置在Spring XML或其他基于Spring的配置。Shiro需要应用级的SecurityManager单例。注意,它不需要是静态单例,只要保证在应用中存在一个SecurityManager实例即可。2. Standalone Applications 在Spring应用中配置应用级SecurityMa...
2013-04-18 11:23:19
147
原创 Shiro User Manual-Custom Subjects
1. Custom Subject Instances Shiro在1.0版本添加了一个新的特性,用于在特殊情景自定义subject。 2. Subject.Builder Subject.Builder可以创建一个匿名,无session关联的Subject实例:[code="java"]Subject subject = new Subject.Builder().bui...
2013-04-18 11:03:27
151
原创 Shiro User Manual-Testing
1. Test Setup 创建的Subject实例,必须要绑定到当前线程上,当执行完毕,需要解除绑定。现在流行的测试框架像JUnit,TestNG都支持"setup"和"teardown"。我们可以利用这个特性模拟Shiro在应用中的完整操作。我们创建了AbstractShiroTest抽象类,可用于单元测试和集成测试:[code="java"]import org.apache.s...
2013-04-18 10:59:20
134
原创 Shiro User Manual-Caching
1. Caching Shiro团队了解性能的重要性,因此,缓存被作为一个重要的特性纳入到安全操作中。2. Caching API Shiro有3个重要的缓存接口: a. CacheManager 缓存的管理组件,它返回Cache实例。 b. Cache 维护键值对形式的缓存 c. CacheManagerAware 一个接口,由想获得和使用CacheManager...
2013-04-18 10:52:56
121
原创 Shiro User Manual-Web Support
1. Configuration 将Shiro集成到web应用中非常简单,只需要在web.xml中配置ContextListener和Filter即可。需要注意的是,如果是Spring web应用,请参考Shiro与Spring集成那节。 a. web.xml Shiro1.2及其以后版本,在web.xml中添加:[code="java"] org.apache.sh...
2013-04-18 10:41:48
116
原创 Shiro User Manual-Session Management
1. Session Management Shiro提供了安全框架所独有的特性:企业级session的解决方案。1.1 Using Sessions 使用Subject获取Session:[code="java"]Subject currentUser = SecurityUtils.getSubject();Session session = currentUs...
2013-04-17 22:41:58
164
原创 Shiro User Manual-Realms
1. Realms Realm是可以访问应用系统中数据,例如用户,角色,权限等的组件。Realm将应用系统中的数据转义为Shiro可识别的格式,Shiro就可以提供简单易懂的Subject API。Realms通常有一个一对一的数据源关联,比如关系型数据库,LDAP目录,文件系统或其他类似资源,其实现了Realm接口,并使用指定的数据源API去查找授权数据。一个Realm实质上是和安全相关的D...
2013-04-17 11:54:00
145
原创 Shiro User Manual-Authorization-Permissions
1. Wildcard Permissions 为了易读和简化处理,Shiro提供了强大且直观的权限语法,即WildcardPermission(通配符权限)。1.1 Simple Usage 假设你想保护公司打印机的使用,一些人可以使用打印机,一些人只能查看打印机服务器队列中的任务。最简单的方式就是定义一个queryPrinter权限,然后检查用户是否具有这个权限:[code...
2013-04-17 09:31:29
145
原创 Shiro User Manual-Authorization
1. Authorization[img]http://dl.iteye.com/upload/attachment/0082/8977/8f0925d6-b045-38fc-8f88-c39c1d495396.png[/img] Authorization, 授权,或访问控制,是对资源访问的管理。换句话说,控制用户在应用中访问资源的权限。 授权的例子:当前用户是否可以查看当前网页,编...
2013-04-17 09:22:12
184
原创 Shiro User Manual-Authentication
1.[size=medium]Authentication[/size][img]http://dl.iteye.com/upload/attachment/0082/8420/a74a9989-07db-39c3-a2e7-8f4473938f92.png[/img]Authentication,认证,即身份验证,证明一个用户是谁。用户想要证明其身份,就需要提供身份信息,以及系统可以识别...
2013-04-16 11:28:24
169
原创 Shiro User Manual-Configuration
1. Configuration Shiro可以运行在任何环境下,从命令行应用到企业级集群应用。由于环境的不同,配置也不同。这部分所讲述的配置,只需要Shiro的core包支持即可。Shiro的SecurityManager实现和支持的所有组件服务,都与JavaBeans兼容,因此,可以通过任何形式配置,如Java,XML,YAML,JSON,Groovy,Builder Markup等。...
2013-04-16 11:19:05
148
原创 Shiro User Manual-Architecture
1. Overview Shiro的设计目标是通过直观而简易的API,简化应用安全的操作。Shiro的核心设计思想模型化了应用安全性的问题:谁在与应用进行交互。软件应用都是基于用例设计的。当你在设计用户接口或服务API时,都是基于用户如何跟软件交互的基础上。比如:如果当前和系统交互的用户已登录,就显示查看用户信息的按钮,否则显示登录按钮。这个例子表明,应用都是为了满足客户的需求,即便当前交互的...
2013-04-16 11:02:48
127
原创 Shiro User Manual-Tutorial
1. Your First Apache Shiro Application 如果对Shiro很陌生,这篇简短的教程将教你如何搭建一个基于Shiro的简单应用,同时在应用中讲解Shiro的核心概念,以帮助你熟悉和理解API。2. Setup 我们通过简单的命令行应用让你体会一下Shiro的API。这篇教程需要Java1.5及其以后版本,使用Maven作为构建工具。对于这篇教程,需要...
2013-04-16 10:52:17
131
原创 Shiro User Manual-Introduction
1. What is Apache Shiro? Shiro是一个强大而灵活的开源安全框架,它具有认证,授权,企业级session管理,加密等功能。Shiro简单易用,屏蔽了那些复杂的安全操作细节,并提供了直观的API让开发者保证其应用的安全性。通过Shiro可以进行如下操作: a. 对用户进行认证。 b. 进行用户权限的控制,如: 1. 用户是否具有某项角色。 2. 是否...
2013-04-16 10:42:06
112
Java Object Serialization
1. Overview Java中的序列化就是将Java对象的状态转化为字节序列,以便存储和传输的机制,在未来的某个时间,可以通过字节序列重新构造对象。把Java对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为Java对象的过程称为对象的反序列化。这一切都归功于java.io包下的ObjectInputStream和ObjectOutputStream这两个类。2. Ser...
2011-06-02 10:57:16
167
Java Concurrent Programming (7)
7. Double-Checked Locking 双重检查锁定机制,是一个老生常谈的问题了。双重检查锁定机制已经被广泛的引用,特别是在多线程环境下的懒加载实现上。但是,如果没有额外的同步,它不能独立可靠的运行在Java平台。看这段代码:[code="java"]public class Singleton { private Singleton instance = nu...
2011-05-24 10:31:48
104
Java Concurrent Programming (6)
6. 并发集合类 Hashtable是一个易于使用,线程安全的集合类,它的线程安全性是凭借代价换来的--Hashtable中的所有方法都是同步的。HashMap是Hashtable的继承者,通过一个不同步的基类和一个同步的包装器Collections.synchronizedMap解决了线程安全性问题。通过将基本的功能从线程安全性中分离开来,Collections.synchronizedM...
2011-05-16 11:46:17
111
Java Concurrent Programming (5)
5 原子变量 java.util.concurrent.atomic包中添加原子变量类。所有原子变量都公开"比较并设置"原语,这些原语都是使用平台上可用的最快本机结构来实现的。原子变量类可以认为是volatile变量的泛化,它扩展了volatile变量的概念,来支持原子条件的比较并设置更新。读取和写入原子变量与读取和写入对volatile变量的访问具有相同的存取语义。concurrent.a...
2011-05-12 21:09:31
120
Java Concurrent Programming (4)
4 锁 锁是递归的,是基于每线程的。锁提供了两种主要特性:互斥(mutual exclusion)和可见性(visibility)。互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据。可见性要更加复杂一些,它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的。Java语言中,使用synch...
2011-05-11 21:12:28
107
Java Concurrent Programming (2)
2 线程死锁 死锁(dead lock)是指两个或多个线程都有权限访问两个或多个对象,并且每个线程都在已经获得某个对象锁的情况下等待其它线程已经得到的锁。假设线程A持有对象X的锁,并且正在试图获得对象Y的锁,同时,线程B已经拥有对象Y的锁,并在试图获得对象X的锁。此时因为线程互相等待释放锁而彼此都无法继续操作,死锁就产生了。以下是个死锁的例子:[code="java"]public ...
2011-05-10 21:27:41
87
Java Concurrent Programming (3)
3 线程异常 线程在执行其run方法时,很有可能抛出异常。而run方法签名中,并未声明会抛出任何检查型异常。但在实际程序中,run方法中极其可能抛出一个异常,从而导致此线程被终止。更糟糕的是,如果线程因为异常终止,我们无法在主线程中使用try...catch...进行异常的捕获,从而可能导致一些问题的发生,例如无法释放某些资源等。主线程之所以不处理子线程抛出的RuntimeException...
2011-05-10 09:13:41
108
Java Object Cloning
1. Overiew 在实际编程中,我们经常会遇到这样一个情景:有一个对象A,存在属性方法,现在需要一个和A完全相同的新对象B,并且B的任何改动都不会影响到A中的值。那么,最常用的办法就是对A进行克隆。2. How to Clone 在java.lang.Object中有一个clone方法,该方法的签名如下:[code="java"]protected native O...
2011-05-05 22:03:25
121
Java Concurrent Programming (1)
1. 线程概述 线程(thread)的英文原意是"细丝",Java语言把"正在执行程序的主体"称为线程。如果"在某一时间点进行的处理"只有一个,或者是说"正在执行的程序主体"只有一个,则称之为单线程程序(single threaded program)。如下例:[code="java"]public static void main(String[] args) { for(i...
2011-05-04 21:39:40
158
Java Class Loader
1. ClassLoader 类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class 类的一个实例。2. ClassLoader Hierarchy J...
2011-04-17 18:54:02
108
空空如也
java.sql.Connection类中有个方法
2011-03-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人