![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
消息中间件
iteye_15849
这个作者很懒,什么都没留下…
展开
-
kestrel 源码分析之一 综述
Kestrel 是Twitter内部使用的,用scala语言实现的一个消息队列中间件。而且核心代码只用了两千多行,能够支持事务,并且支持消息的持久化,Kestrel底层的通信是通过netty实现的,支持memcached协议。下面我们来分析一下kestrel的几个核心实现类,并讨论一下它是如何支持事务和消息的持久化。而Kestrel的消息的持久化是通过Java NIO实现。 下面是Kestr...原创 2014-07-05 17:22:06 · 439 阅读 · 0 评论 -
kestrel 源码分析之二 QueueCollection消息队列管理
前一篇已经对Kestrel的启动类进行了说明,我们看到在启动类中定义了一个QueueCollection,这个类主要用在内存中维护用户定义的队列。 [code="java"] def loadQueues() { Journal.getQueueNamesFromFolder(path) map { queue(_) } } def queue(name: String)...原创 2014-07-05 23:12:27 · 166 阅读 · 0 评论 -
kestrel 源码分析之三 PersistentQueue对应一个内存中的队列
PersistentQueue类主要用于在内存中维护一个队列,该类是Kestrel的核心类,是真正对于一个队列的维护。我们看到上文中QueueCollection中主要是调用下面的setup方法,下面我们看看setup方法到底做了什么 [code="java"] def setup() { synchronized { queueSize = 0 repl...原创 2014-07-05 23:14:07 · 219 阅读 · 0 评论 -
kestrel 源码分析之四 Journal消息持久化类
上文我们看到PersistentQueue类的实现,它就代表每个消息队列在服务其中的实现,另外我们会看到每个PersistentQueue类包含一个Journal对象,该对象主要是负责队列的持久化操作。对于文件的读写我们用Java NIO来实现。下面我们来看一看主要的几个方法 [code="java"] def fillReadBehind(gotItem: QItem => Unit)(go...原创 2014-07-06 00:19:39 · 264 阅读 · 0 评论