Kestrel 是Twitter内部使用的,用scala语言实现的一个消息队列中间件。而且核心代码只用了两千多行,能够支持事务,并且支持消息的持久化,Kestrel底层的通信是通过netty实现的,支持memcached协议。下面我们来分析一下kestrel的几个核心实现类,并讨论一下它是如何支持事务和消息的持久化。而Kestrel的消息的持久化是通过Java NIO实现。
下面是Kestrel的几个核心实现类:
Kestrel.scala -- 核心启动类
QueueCollection.scala -- 通过Map管理所有消息队列
PersistentQueue.scala -- 用于维护一个消息队列
Journal.scala -- 用于管理对应的消息队列持久化
KestrelHandler.scala -- Kestrel消息队列核心操作管理类
QItem.scala -- 用于存储一个消息实体
journalSyncTimer = new HashedWheelTimer(10, TimeUnit.MILLISECONDS)
timer = new HashedWheelTimer(100, TimeUnit.MILLISECONDS)
queueCollection = new QueueCollection(queuePath, new NettyTimer(timer), new NettyTimer(journalSyncTimer), defaultQueueConfig, builders)
queueCollection.loadQueues()
Kestrel启动的时候首先实例化一个QueueCollection,用于管理一组消息队列,然后通过queueCollection.loadQueues()方法把之前持久化的消息load到内存中。
executor = Executors.newCachedThreadPool()
channelFactory = new NioServerSocketChannelFactory(executor, executor)
val memcachePipelineFactory = new ChannelPipelineFactory() {
def getPipeline() = {
val protocolCodec = protocol match {
case Protocol.Ascii => MemcacheCodec.asciiCodec(bytesRead, bytesWritten)
case Protocol.Binary => throw new Exception("Binary protocol not supported yet.")
}
val handler = new MemcacheHandler(channelGroup, queueCollection, maxOpenTransactions, clientTimeout)
Channels.pipeline(protocolCodec, handler)
}
}
memcacheAcceptor = memcacheListenPort.map { port =>
val address = new InetSocketAddress(listenAddress, port)
makeAcceptor(channelFactory, memcachePipelineFactory, address)
}
定义一个MemcacheHandler,用于接收外面的消息,并且把MemcacheHandler绑定到配置文件中配置的端口上。
分享到:
相关推荐
NULL 博文链接:https://snowolf.iteye.com/blog/1604531
kestrel项目源文件包
在.NET 6.0上使用Kestrel配置和自定义HTTPS.doc
这一步就不详细说了,有免费的和收费的,申请完成之后会给你一个*.pfx结尾的文件。 添加NuGet包 nuget中查找然后再程序中添加引用Microsoft.AspNetCore.Server.Kestrel.Https 配置 把*.pfx结尾的文件...
资源分类:Python库 所属语言:Python 资源全名:kestrel-lang-1.0.5.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
NULL 博文链接:https://snowolf.iteye.com/blog/1605229
addlog-kestrel
NULL 博文链接:https://snowolf.iteye.com/blog/1612207
NULL 博文链接:https://vanadiumlin.iteye.com/blog/1461152
本示例可直接运行,方便快速了解Kestrel框架. Kestrel 是包含在 ASP.NET Core 项目模板中的 Web 服务器, .NET Core 支持的所有平台和版本均支持 Kestrel。
介绍和背景Kestrel项目涉及使用全自制设计的计算和自我教育的自由,直至从原理图和寄存器传输逻辑一直到OS API和用户教程的各个级别公开记录的硬件和软件。 根据我的经验,它的设计来自多种来源: 硬件工程卓越奖...
红隼节点Node.js 的 Kestrel 客户端安装 npm install kestrel.node用法 var Kestrel = require ( 'kestrel.node' ) ;var client = new Kestrel ( 'localhost:22133' ) ;// get can optionally take a timeout in ...
这篇文章主要是记录如何将Kestrel的服务封装在WindowService中 关于WindowsServer 请参考如下这篇文章 .netcore worker service (辅助角色服务) 的上手入门,包含linux和windows服务部署 开发服务 之前做过.net5...
Kestrel是不是Unix或Windows的内核。
Kestrel(Kotlin 事件溯源) 用于在 Kotlin 中构建基于事件的 CQRS 应用程序的框架。 概括 事件溯源是一种架构范式,其中应用程序状态被建模并存储为在您的应用程序域中有意义的语义事件的不可变序列。 CQRS,命令...
FastGateway 一个超级简单方便的网关,基于Kestrel+Yarp实现的网关。 支持动态配置路由,支持动态配置集群,支持动态配置HTTPS证书,无需重启即可使用。
python库。 资源全名:kestrel_lang-1.1.0-py3-none-any.whl