使用Rebus将错误消息从错误队列移回到原始队列

时间:2019-05-22 21:36:30

标签: rebus rebus-azureservicebus

是否可以通过编程方式或通过UI将错误消息从错误队列移至其原始队列?

更新

以下有关以下代码的问题:

1以下代码适用于发布者或订阅者,还是两者都适用?

以下代码:

 Configure.With(activator)
    .Transport(t => (...)) //< use queue "error" here
    .Routing(r =>
    {
        r.AddTransportMessageForwarder(async transportMessage =>
        {
            var sourceQueue = transportMessage.Headers.TryGetValue(Headers.SourceQueue, out var result)
                ? result
                : throw new ArgumentException($"Could not find '{Headers.SourceQueue}' header");

            return ForwardAction.ForwardTo(sourceQueue);
        });
    })
    .Start();
下面的

2 Transport方法适用于我的代码。但是,上面的代码建议使用error队列名称,这行得通吗?

如果使用上面的代码,在下面指定的发布者和订阅者队列名称在哪里?

请提供发布子模式的代码。

发布者:

.Transport(t => t.UseAzureServiceBus(Consts.ServiceBusConnectionString, Consts.Publisher))

订户:

.Transport(t=>t.UseAzureServiceBus(Consts.ServiceBusConnectionString, Consts.Subscriber1))

https://github.com/rebus-org/Rebus/wiki/Transport-message-forwarding

1 个答案:

答案 0 :(得分:0)

由于Rebus使用普通队列作为死信队列,因此以 @Headers({"Content-Type: application/json", "eventId: 1"}) @POST(Constants.UrlPath.POST_CLOSE_EVENT) Call<ResponseBody> callDeleteEventRequest(); 作为输入队列来启动总线实例非常容易–那么您可以例如使用Rebus内置的transport message forwarding功能对消息进行操作-例如将它们转发到其源队列:

error

或在那里想要的任何东西。

还存在一个可以执行此操作的UI Fleet Manager –它完全取代了对死信队列的需要,因为它在数据库中存储了失败的消息,并可以将失败的消息返回给它们源队列(或其他队列,如果需要的话),但是只有在您是Rebus Pro订阅者的情况下才可用。


更新(包含更新中问题的答案)

1)AddTransportMessageForwarder仅与接收消息的端点相关。

2)这是指定为Configure.With(activator) .Transport(t => (...)) //< use queue "error" here .Routing(r => { r.AddTransportMessageForwarder(async transportMessage => { var sourceQueue = transportMessage.Headers.TryGetValue(Headers.SourceQueue, out var result) ? result : throw new ArgumentException($"Could not find '{Headers.SourceQueue}' header"); return ForwardAction.ForwardTo(sourceQueue); }); }) .Start(); 方法的参数的“队列名称”。例如,对于Azure Service Bus,它将显示为

.Useblablabla