`
tjuxiaoqiang
  • 浏览: 25920 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

kestrel 源码分析之一 综述

阅读更多
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绑定到配置文件中配置的端口上。
分享到:
评论

相关推荐

    征服 Kestrel

    通过阅读和分析源码,我们可以深入理解web服务器的工作原理,如如何处理请求和响应、如何进行TCP连接管理、如何实现异步I/O等。源码的结构清晰,易于理解和调试,可以帮助开发者定制自己的服务器行为或者优化性能。 ...

    在.NET 6.0上使用Kestrel配置和自定义HTTPS.doc

    在 ASP.NET Core 的第一个版本中,微软使用了 libuv,然后在其顶部添加了一个名为 Kestrel 的层。现在,Kestrel 已经发展成熟,是一个能运行 ASP.NET Core 应用的微软系的 HTTP 服务器。 二、Kestrel 的角色 IIS ...

    kesterl源文件包

    kestrel项目源文件包

    Kestrel持久化队列服务器

    2. **实时处理**: 在大数据分析场景中,Kestrel可以接收实时数据流,然后分发到处理系统。 3. **缓存**: 对于低访问频率但需要长期保存的数据,Kestrel可以作为一个高效的缓存层。 ### 源码解析 Kestrel是用C++...

    征服 Kestrel + XMemcached

    Kestrel是一个高性能、异步的分布式消息队列,而XMemcached则是一个广泛使用的Java客户端,用于连接到Memcached缓存服务器。在这里,我们将会探讨这两个技术的基本概念、它们在IT领域的应用以及如何将它们结合使用。...

    征服 Kestrel + XMemcached + Spring TaskExecutor

    首先,Kestrel是一个开源的、基于内存的分布式消息队列系统,它主要由Twitter开发并维护。Kestrel以其高吞吐量和低延迟而著名,被广泛用于构建实时处理系统和微服务架构。它的核心特性包括持久化、多客户端支持以及...

    ASP.NET Core Kestrel 中使用 HTTPS (SSL)

    这一步就不详细说了,有免费的和收费的,申请完成之后会给你一个*.pfx结尾的文件。  添加NuGet包  nuget中查找然后再程序中添加引用Microsoft.AspNetCore.Server.Kestrel.Https  配置  把*.pfx结尾的文件...

    Kestrel框架的使用demo

    Kestrel框架是ASP.NET Core的一部分,它是一个高度可配置、高性能的Web服务器,被设计用于构建跨平台的现代Web应用。Kestrel自.NET Core 1.0版本起就已成为默认的Web服务器,支持Windows、Linux、macOS等操作系统,...

    Python库 | kestrel-lang-1.0.5.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:kestrel-lang-1.0.5.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    addlog-kestrel

    addlog-kestrel

    kestrel.node:Node.js 的 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 ...

    web服务器KestrelHttpServer.zip

    通常,部署一个Kestrel服务器的步骤包括: 1. 创建一个新的ASP.NET Core项目。 2. 配置Kestrel服务器,指定监听的端口和协议。 3. 添加中间件处理请求和响应。 4. 运行项目,Kestrel将开始监听并处理传入的HTTP请求...

    Kestrel封装成WindowServer.zip

    这篇文章主要是记录如何将Kestrel的服务封装在WindowService中 关于WindowsServer 请参考如下这篇文章 .netcore worker service (辅助角色服务) 的上手入门,包含linux和windows服务部署 开发服务 之前做过.net5...

    Kestrel:Kestrel是在I386上运行的实验内核-开源

    Kestrel是不是Unix或Windows的内核。

    kestrel:Kestrel是一系列家用计算机,它们尽可能地基于开源技术构建,并尽可能地支持开源哲学

    介绍和背景Kestrel项目涉及使用全自制设计的计算和自我教育的自由,直至从原理图和寄存器传输逻辑一直到OS API和用户教程的各个级别公开记录的硬件和软件。 根据我的经验,它的设计来自多种来源: 硬件工程卓越奖...

    ASP.NET Core 因为 Nginx 配置 Connection 为 Upgrade 导致 Kestrel 返回 400

    ` 设置不当时,Nginx 可能无法正确地将升级请求转发给 Kestrel,导致 Kestrel 无法识别出这是一个 WebSocket 请求,从而返回 400 坏请求错误。Kestrel 期望 `Connection` 字段包含 `upgrade`,而不仅仅是 `Upgrade`...

    Python库 | kestrel_lang-1.1.0-py3-none-any.whl

    "kestrel_lang-1.1.0-py3-none-any.whl"就是这样一个Python库的发行版,它适用于Python 3解释器。 首先,我们来了解一下`.whl`文件。`.whl`是Python的二进制分发格式,它是Python Wheel项目的产物。Wheel格式旨在...

    一个超级简单方便的网关,基于Kestrel+Yarp实现的网关 支持动态配置路由,支持动态配置集群,支持动态配置HTTPS证书

    **FastGateway:基于Kestrel+Yarp的...总之,FastGateway凭借其基于Kestrel和Yarp的高效实现,以及动态配置的能力,为开发者提供了一个强大而灵活的API网关解决方案,满足了现代Web应用对性能、安全和易用性的需求。

Global site tag (gtag.js) - Google Analytics