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绑定到配置文件中配置的端口上。
分享到:
相关推荐
通过阅读和分析源码,我们可以深入理解web服务器的工作原理,如如何处理请求和响应、如何进行TCP连接管理、如何实现异步I/O等。源码的结构清晰,易于理解和调试,可以帮助开发者定制自己的服务器行为或者优化性能。 ...
在 ASP.NET Core 的第一个版本中,微软使用了 libuv,然后在其顶部添加了一个名为 Kestrel 的层。现在,Kestrel 已经发展成熟,是一个能运行 ASP.NET Core 应用的微软系的 HTTP 服务器。 二、Kestrel 的角色 IIS ...
kestrel项目源文件包
2. **实时处理**: 在大数据分析场景中,Kestrel可以接收实时数据流,然后分发到处理系统。 3. **缓存**: 对于低访问频率但需要长期保存的数据,Kestrel可以作为一个高效的缓存层。 ### 源码解析 Kestrel是用C++...
Kestrel是一个高性能、异步的分布式消息队列,而XMemcached则是一个广泛使用的Java客户端,用于连接到Memcached缓存服务器。在这里,我们将会探讨这两个技术的基本概念、它们在IT领域的应用以及如何将它们结合使用。...
首先,Kestrel是一个开源的、基于内存的分布式消息队列系统,它主要由Twitter开发并维护。Kestrel以其高吞吐量和低延迟而著名,被广泛用于构建实时处理系统和微服务架构。它的核心特性包括持久化、多客户端支持以及...
这一步就不详细说了,有免费的和收费的,申请完成之后会给你一个*.pfx结尾的文件。 添加NuGet包 nuget中查找然后再程序中添加引用Microsoft.AspNetCore.Server.Kestrel.Https 配置 把*.pfx结尾的文件...
Kestrel框架是ASP.NET Core的一部分,它是一个高度可配置、高性能的Web服务器,被设计用于构建跨平台的现代Web应用。Kestrel自.NET Core 1.0版本起就已成为默认的Web服务器,支持Windows、Linux、macOS等操作系统,...
资源分类:Python库 所属语言:Python 资源全名:kestrel-lang-1.0.5.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
addlog-kestrel
红隼节点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服务器的步骤包括: 1. 创建一个新的ASP.NET Core项目。 2. 配置Kestrel服务器,指定监听的端口和协议。 3. 添加中间件处理请求和响应。 4. 运行项目,Kestrel将开始监听并处理传入的HTTP请求...
这篇文章主要是记录如何将Kestrel的服务封装在WindowService中 关于WindowsServer 请参考如下这篇文章 .netcore worker service (辅助角色服务) 的上手入门,包含linux和windows服务部署 开发服务 之前做过.net5...
Kestrel是不是Unix或Windows的内核。
介绍和背景Kestrel项目涉及使用全自制设计的计算和自我教育的自由,直至从原理图和寄存器传输逻辑一直到OS API和用户教程的各个级别公开记录的硬件和软件。 根据我的经验,它的设计来自多种来源: 硬件工程卓越奖...
` 设置不当时,Nginx 可能无法正确地将升级请求转发给 Kestrel,导致 Kestrel 无法识别出这是一个 WebSocket 请求,从而返回 400 坏请求错误。Kestrel 期望 `Connection` 字段包含 `upgrade`,而不仅仅是 `Upgrade`...
"kestrel_lang-1.1.0-py3-none-any.whl"就是这样一个Python库的发行版,它适用于Python 3解释器。 首先,我们来了解一下`.whl`文件。`.whl`是Python的二进制分发格式,它是Python Wheel项目的产物。Wheel格式旨在...
**FastGateway:基于Kestrel+Yarp的...总之,FastGateway凭借其基于Kestrel和Yarp的高效实现,以及动态配置的能力,为开发者提供了一个强大而灵活的API网关解决方案,满足了现代Web应用对性能、安全和易用性的需求。