是否可以通过编程方式或通过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
答案 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