更新ravendb中的" FailedMessages" -document的主体(servicecontrol instance)

时间:2016-03-11 14:35:35

标签: nservicebus

我希望能够重试失败的NServicebus消息,但需要更新正文。

我已成功更新了" FailedMessages"的ravendb(servicecontrol实例)中的body标签。文献 api仍然返回旧体(来自bodyUrl)。因此,当我从自定义文档查看器重试消息时,当到达处理程序时,正文仍然是旧的。

是否有可能更新身体?

CNC中 使用Servicecontrol API重试时。它是重新发送的错误队列中的消息,还是从servicecontrol ravendb实例中收集并汇总并发送的数据?

2 个答案:

答案 0 :(得分:1)

不可能更新消息的正文,这违背了消息的基本原则是不可变的......

如果有商业理由修改数据,则应由您的应用程序逻辑(即对帐过程)完成。 有意义吗?

编辑: -

错误消息从错误队列处理并存储在RavenDB文档中,当调用重试或重试批处理时,消息被组合并发送到处理字段消息的原始端点。只是为了清楚。

请注意:ServiceControl的API不是公开且受支持的API ...

答案 1 :(得分:0)

我刚刚设法更新了邮件正文。毕竟这是可能的。

以下是ServiceControl的一些源代码:

DocumentStore.DatabaseCommands.PutAttachment("messagebodies/" + bodyId, null, bodyStream, new RavenJObject
            {
                {"ContentType", contentType},
                {"ContentLength", bodySize}
            });

之前我尝试更新具有body标记的FailedMessage文档。但我需要更新附件。上面代码中的bodyId不是UniqueMessageId,而是在ProcessingAttempts中找到的MessageId - > MessageMetadata - >的MessageId。