- 浏览: 54884 次
最新评论
文章列表
一、pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apac ...
spring-batch 应用:从csv读取数据写入到数据库
一、spring配置文件
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:con ...
Zookeeper的读操作:getData()、getChildren()、exists(),都有可选参数watch。
Definition
watch是一次性事件,当watch监视的数据发生变化时就会被触发。
One-time trigger
当znode数据发生变化时,客户端会接收到一个watch事件。只有客户端读操作后,数据变化时服务端才会发送watch事件。后续服务端数据发生变化,客户端不会接收到watch事件,除非客户端第二次发起读操作。
Sent to client
这意味着事件可能不会到成功到达客户端,可能只在路上。watch是异步发送的,客户端在接 ...
Time in ZooKeeper
- 博客分类:
- zookeeper
Zxid
zookeeper状态的每次改变都会接收zxid形式的标记。这能够统计出zookeeper所有的变更。每一次变更都会有惟一的zxid。假如:zxid1小于zxid2,则zxid1比zxid2发生的时间要早。
Version numbers
node的每一次变更都会导致node的版本号递 ...
Znodes是一个数据结构,包含了数据变更和acl的版本号、时间戳。
版本号和时间戳可以被用来验证缓存和控制更新。
每次znodes的数据发生变更,版本号就递增。例如,当一个客户端获取数据时,同时会获取数据的版本号。若客户端发生更新或删除操作时,需要同时提供变更node数据的版本号。如果这个版本号与实际的版本号不相同,此次操作将失败。
在分布式系统中,Node就是指通用主机、服务器、集群中的一个成员、一个客户端进程等。
在zookeeper世界中,znodes指dat ...
Data Model
- 博客分类:
- zookeeper
除了下面的约束外,其他任何unicode字符都能作为node的名字:
1、空字符串(\u0000),因为c客户端不支持。
2、显示不友好或容易混淆:\u0001 - \u0019 and \u007F - \u009F
3、没有原因,就是不允许: \ud800 -uF8FFF, \uFFF0-uFFFF, \uXFFFE - \uXFFFF (where X is a digit 1 - E), \uF0000 - \uFFFFF.
4、"."可以作为名称的一部分,但是不能单独使用,因为zookeeper不使用相对路径。
5、当然"zookeeper&q ...
并发队列-BlockingQueue
- 博客分类:
- 并发
转自:http://www.java3z.com/cwbwebhome/article/article20/200030.html?id=4852
本例介绍一个特殊的队列:BlockingQueue,如果BlockingQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态,直到BlockingQueue进了东西才会被唤醒,同样,如果BlockingQueue是满的,任何试图往里存东西的操作也会被阻断进入等待状态,直到BlockingQueue里有空间时才会被唤醒继续操作。 本例实现一个篮子程序,不过这个篮子中最多能放得苹果数不是1,可以随意指定。当 ...
hannel.queueDeclareNoWait(queue_name, false, true, true, null);
声明队列,但是无序broker返回任何消息。
同时exchange声明时,也可以使用no-wait:
channel.queueDeclareNoWait(q, false, true, true, null);
绑定时也可以no-wait:
channel.queueBindNoWait(q, "amq.fanout", "", null);
AtomicReference
- 博客分类:
- 并发
转自:http://www.cnblogs.com/skywang12345/p/3514623.html
概要
本章对AtomicReference引用类型的原子类进行介绍。内容包括:AtomicReference介绍和函数列表AtomicReference源码分析(基于JDK1.7.0_40)AtomicReference示例
转载请注明出处:http://www.cnblogs.com/skywang12345/p/3514623.html
AtomicReference介绍和函数列表
AtomicReference是作用是对"对象"进行原 ...
DeclareOk a = channel.queueDeclarePassive(q);
申明队列时,如果q在broker不存在,则会报错:
reply-code=404,reply-text=NOT_FOUND
如果存在则会返回ok
如果设置了ifunused=true,此时再去删除exchange,则会报错:
channel.queueBind(queueName, EXCHANGE_NAME, ROUTING_KEY);
channel.exchangeDelete(EXCHANGE_NAME, true);
fail("Exception expected if exchange in use");
QueueingConsumer consumer = new QueueingConsumer(channel);
声明一个消费者,然后接收消息。
如果我们直接用这种方式:consumer.nextDelivery()
那么当这个consumer没有消息时,线程会阻塞。因为consumer内部是blockqueue,没有数据却取数据时,就会阻塞,知道有数据放进此blockqueue中。
除非你知道这个consumer会接收到多少条消息,就调用多少次的consumer.nextDelivery(),不过这总是不可靠的。
那么你可以这样用:
consumer.nextD ...
queue可以与exchange绑定
exchange之间也可以互相绑定,但是当queue与互相绑定的exchange都存在绑定关系时,不会重复接收消息。
/* pre (eN --> qN) for N in [0..2] * add binding (e0 --> q1) * test (e0 --> {q0, q1}) * add binding (e1 --> e0) * resulting in: (e1 --> {q1, e0 --> {q0, q1}}) * test (e1 --&g ...
如果一个excahnge被定义成Internal,那么consumer是不能给它发消息的,会报错;
//// Functional test demonstrating use of an internal exchange in an exchange to// exchange routing scenario. The routing topology is://// ------- -------// -/ \- -/ \-// / \ ...