【问题标题】:Rebus 2 - Manual retryRebus 2 - 手动重试
【发布时间】:2016-01-12 17:46:56
【问题描述】:

是否有使用 rebus2 手动重试的任何“最佳实践”?

我有一个用于“错误监控”的自定义 Web UI,我希望能够从 Web UI 手动重试错误。问题是错误队列似乎总是“错误”,因此它不包含原始队列是什么的信息。

我们使用 SQL Server 作为 Rebus 消息的存储。

【问题讨论】:

    标签: rebus


    【解决方案1】:

    您可以解码失败消息的标头 - 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...
    }
    

    这应该可以相当容易地从失败消息的标题中提取源队列信息。

    我希望这是有道理的:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-01
      • 2022-01-13
      • 1970-01-01
      • 2011-03-19
      相关资源
      最近更新 更多