我希望能够重试失败的NServicebus消息,但需要更新正文。
我已成功更新了" FailedMessages"的ravendb(servicecontrol实例)中的body标签。文献 但 api仍然返回旧体(来自bodyUrl)。因此,当我从自定义文档查看器重试消息时,当到达处理程序时,正文仍然是旧的。
是否有可能更新身体?
CNC中 使用Servicecontrol API重试时。它是重新发送的错误队列中的消息,还是从servicecontrol ravendb实例中收集并汇总并发送的数据?
答案 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。