【问题标题】:Enterprise Service Bus (.NET flavors) - Consuming a batch of messages at a time企业服务总线(.NET 风格) - 一次使用一批消息
【发布时间】:2012-01-31 14:44:33
【问题描述】:

有没有办法在企业服务总线中延迟消息的消费 直到 X 条类似消息准备好或经过 Y 时间?

我的目标是在消费者中序列化和聚合几条消息 所以我不会点击我的存储来获取消息,而是批量存储。

我目前正在使用 Rhino ESB。我想知道我对这个 ESB 或任何其他你知道的选项的选择。

谢谢!

【问题讨论】:

    标签: c# .net nservicebus servicebus rhino-commons


    【解决方案1】:

    在 NServiceBus 中,您可以在一次调用中发送一批消息。这将像每条消息都是单独发送一样处理。另一种选择是使用内置的 Saga 或长时间运行的工作流。您可以唯一地识别和关联消息状态,并利用跟踪时间的超时机制。

    【讨论】:

    • @Adams,我无法实现第一个选项。想象一下,我有几个(数十到数百个)设备使用 REST 端点发送信息,这些信息将被放入 ESB。因此,在任何时候,我都会在发件人中收到一批消息,如果是这样的话,我知道我可以使用 NSB 或 Rhinos ESB 发送这些消息。理想情况下,我正在考虑一些可以让我在消费者中聚合消息的东西。就像“如果队列中有 100 条消息,就使用消息”。我必须检查 Saga 替代方案。我是 ESB 的新手,您介意详细说明您将如何做吗?
    • 在我回答之前,您能否详细说明为什么要限制存储?如果您正在使用消息传递,则处理现在是“离线”的,即使需要几秒钟或几分钟也不重要。
    • 目标表很大,阻止它写入是昂贵的,并且要写入的消息数量非常多。该表也被大量查询。我知道我可以使用我用来编写的锁类型,但我脑海中的理想场景是批量编写而不是单次写入。我正在阅读 Ayende 的这篇文章msdn.microsoft.com/en-us/magazine/ff796225.aspx,我想我可以编写一个消息模块来延迟要发送的消息,并在一定数量的排队或经过一定时间后强制使用消息。跨度>
    • 我对阻塞写入有点担心,因为从长远来看,随着数据的增加,您的超时只会增加。其他选项包括对巨大的表进行分片以使写入更容易或将读取与写入完全隔离。在这种模式下,写入完成后,读取存储(可能是缓存)也需要更新消息。在任何一种情况下,您都将被设置为进一步扩展。
    • 我刚刚实现了一个小服务,它使用 MSMQ 作为传输每 X 分钟对消息进行批处理。我同意你关于分片或 rw 隔离的观点;但我们还没有。非常感谢您的反馈。我将您的答案标记为已接受,但我仍然相信恕我直言,ESB 适用于发布者和订阅者一次交换一条消息的情况。我会继续阅读。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    相关资源
    最近更新 更多