【问题标题】:Queuing messages to prevent Server failure排队消息以防止服务器故障
【发布时间】:2012-11-19 18:15:20
【问题描述】:

我有一个 Netty 客户端向 TCP Netty 服务器异步发送消息。

为了保持服务器ChannelPipeline 的顺序,ExecutionHandler 加上OrderedMemoryAwareThreadPoolExecutor

我的理解是发送到服务器的消息在频道中排队。如果在消息在频道中排队时服务器死机,我需要防止消息丢失。

我目前的解决方案是将每条消息添加到客户端的队列中,并且仅当我从服务器收到每条消息的 Ack 消息时才将它们从队列中删除。你怎么看?

【问题讨论】:

    标签: netty


    【解决方案1】:

    您的建议相当普遍,有时也称为发送窗口。我以前使用过类似的技术,尽管我将发送的消息存储在地图中,因为理论上服务器可以无序地处理和确认它们。

    TCP 使用类似的技术,SMPP 之类的协议甚至允许异步发送的 JMS 提供程序(例如hornetQ)也是如此。 HTTP 流水线是类似的,尽管它确实需要按顺序处理和确认请求。

    您必须考虑的一件事是服务器如何处理重传的消息。它可能已经处理了原始消息,但 ack 在到达您的客户端之前丢失了。例如,如果消息请求某种形式的付款,您不想因为确认丢失而向对方收取两次费用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      • 2013-05-24
      相关资源
      最近更新 更多