【问题标题】:NServiceBus and "Dead Letter" queues?NServiceBus 和“死信”队列?
【发布时间】:2011-10-21 20:22:42
【问题描述】:

所以,我是 MSMQ 和 NServiceBus 的新手。我玩了一些演示,得到了一个使用 NServiceBus 的工作场景。 (借助新的建模工具,我自己的启动和运行比按照演示更容易!)

然后我去向我的同事展示了我的计划(基于我的演示工作和我自己的模型)。其中两人精通 MSMQ 的使用,并开始询问我将如何处理“死信”的问题。

我从未听说过“死信”。他们解释说,它是用于消息无法发送的消息的队列(因为另一端拒绝它们,或者如果另一端不存在)。

我的同事担心的是,如果我们没有死信队列,那么我们将如何阻止消息阻塞队列? (如果队列是先进先出的,并且顶部的消息无法发送,那么它会阻塞它后面的其他消息对吗?)

另一方面,如果我们有“死信”队列,它们是如何管理的? (我是否从 NServiceBus 收到一个事件,告诉我有一条新消息在死信队列中?如何配置消息何时进入死信队列?如何尝试重新发送死信消息?)

那么基本上,NServiceBus 是如何处理无法投递的消息的呢?

【问题讨论】:

    标签: msmq nservicebus


    【解决方案1】:

    通常,您也会指定一个错误队列,无法发送的消息将存放在该队列中。查看他们的 MSMQ 示例: http://docs.particular.net/nservicebus/msmq/transportconfig & http://docs.particular.net/nservicebus/msmq/connection-strings

    <MsmqTransportConfig InputQueue="MyClient" ErrorQueue="error" 
                     NumberOfWorkerThreads="1" MaxRetries="5"/>
    

    在这种情况下,错误队列将与输入队列驻留在同一台机器上。如果愿意,这也可以是远程队列。 MaxRetries 是指在将其放入错误队列之前尝试发送的次数。但是,如何选择处理错误队列取决于您。

    【讨论】:

    • 实际上无法发送的消息并没有放在NServicebus的错误队列中。只有收到并引发异常的消息才会放在那里。 MaxRetries 确定消息在移动到错误队列之前被重新接收(和处理)的次数。 (这在死锁异常的情况下很方便......)
    猜你喜欢
    • 2014-08-13
    • 2012-05-02
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 2021-10-07
    • 2023-01-19
    • 2010-10-26
    • 1970-01-01
    相关资源
    最近更新 更多