gpt4 book ai didi

disruptor-pattern - 应该如何使用 Disruptor(Disruptor Pattern)来构建现实世界的消息系统?

转载 作者:行者123 更新时间:2023-12-03 09:59:46 30 4
gpt4 key购买 nike

由于 RingBuffer 预先分配给定类型的对象,如何使用单个环形缓冲区来处理各种不同类型的消息?

您不能创建新的对象实例来插入到 ringBuffer 中,这会破坏预先分配的目的。

因此,您可以在异步消息传递模式中有 3 条消息:

  • 新订单请求
  • 新订单已创建
  • NewOrderRejected

  • 所以我的问题是你打算如何将 Disruptor 模式用于现实世界的消息系统?

    谢谢

    链接:
    http://code.google.com/p/disruptor-net/wiki/CodeExamples

    http://code.google.com/p/disruptor-net

    http://code.google.com/p/disruptor

    最佳答案

    一种方法(我们最常见的模式)是以编码形式存储消息,即作为字节数组。对于传入的请求,例如修复消息,二进制消息,被快速拉出网络并放置在环形缓冲区中。不同类型消息的解码和分派(dispatch)由该环形缓冲区上的 EventProcessors(消费者)处理。对于出站请求,消息被序列化为预先分配的字节数组,形成环形缓冲区中的条目。

    如果您使用一些固定大小的字节数组作为预分配条目,则需要一些额外的逻辑来处理较大消息的溢出。 IE。选择一个合理的默认大小,如果超过,分配一个更大的临时数组。然后在条目被重用或使用(取决于您的用例)恢复到原始预分配字节数组时丢弃它。

    如果您对不同的消息类型有不同的使用者,您可以通过知道携带类型信息的字节数组的偏移量或通过在条目上传递鉴别器值来快速确定您的使用者是否对特定消息感兴趣。

    此外,也没有禁止创建对象实例和传递引用的规则(我们也在几个地方这样做)。您确实失去了对象预分配的好处,但是破坏者的设计目标之一是允许用户选择最合适的存储形式。

    关于disruptor-pattern - 应该如何使用 Disruptor(Disruptor Pattern)来构建现实世界的消息系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6933347/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com