【发布时间】:2016-01-12 17:46:56
【问题描述】:
是否有使用 rebus2 手动重试的任何“最佳实践”?
我有一个用于“错误监控”的自定义 Web UI,我希望能够从 Web UI 手动重试错误。问题是错误队列似乎总是“错误”,因此它不包含原始队列是什么的信息。
我们使用 SQL Server 作为 Rebus 消息的存储。
【问题讨论】:
标签: rebus
是否有使用 rebus2 手动重试的任何“最佳实践”?
我有一个用于“错误监控”的自定义 Web UI,我希望能够从 Web UI 手动重试错误。问题是错误队列似乎总是“错误”,因此它不包含原始队列是什么的信息。
我们使用 SQL Server 作为 Rebus 消息的存储。
【问题讨论】:
标签: rebus
您可以解码失败消息的标头 - rbs2-source-queue 将设置为传递失败的队列的名称。
标头以 UTF8 编码的 JSON 格式存储在消息表的 headers 列中 - 您可以通过以下方式对其进行检查
SELECT TOP 10 CAST([headers] AS VARCHAR(MAX)) FROM [messages]
(这可能并不总是 100% 正确,因为 SQL Server 中没有真正的 UTF8 操作,但在大多数情况下它应该可以很好地显示标题)
当您处于 C# 领域时,当您打开数据读取器以查看 messages 表的查询结果时,很容易做到这一点:
while(reader.Read())
{
var bytesFromHeadersColumn = (byte[])reader["headers"];
var jsonText = Encoding.UTF8.GetString(bytesFromHeadersColumn);
// use a JSON serializer to parse jsonText here...
}
这应该可以相当容易地从失败消息的标题中提取源队列信息。
我希望这是有道理的:)
【讨论】: