Nservicebus使用MSMQ延迟重试

Nservicebus使用MSMQ延迟重试,nservicebus,msmq,Nservicebus,Msmq,我们是否可以使用nservicebus和MSMQ传输启用延迟重试。 当我这样做时,它会抛出一个警告并将消息移动到错误队列 “可恢复性策略已请求DelayedRetry,但延迟传递功能在当前终结点配置中不可用。请改为将消息移动到错误队列。” 但根据nservicebus文档,它告诉我们,如果支持延迟交付,则可以执行延迟重试。我在下面提到了延迟交货的问题 “NServiceBus为本机不支持延迟消息传递的传输(即MSMQ和SQL Server传输)提供延迟传递功能。” endpointConfigu

我们是否可以使用nservicebus和MSMQ传输启用延迟重试。 当我这样做时,它会抛出一个警告并将消息移动到错误队列

“可恢复性策略已请求DelayedRetry,但延迟传递功能在当前终结点配置中不可用。请改为将消息移动到错误队列。”

但根据nservicebus文档,它告诉我们,如果支持延迟交付,则可以执行延迟重试。我在下面提到了延迟交货的问题

“NServiceBus为本机不支持延迟消息传递的传输(即MSMQ和SQL Server传输)提供延迟传递功能。”

endpointConfiguration.sendFailedMessageTo(“错误”);
endpointConfiguration.AuditProcessedMessageTo(“审核”);
endpointConfiguration.DisableFeature();
var messageProcessingConcurrency=ConfigurationManager.AppSettings[“NservicebusMessageProcessingConcurrency”];
limitMessageProcessingConcurrency to(int.Parse(messageProcessingConcurrency));
//配置延迟重试
var recoverability=endpointConfiguration.recoverability();
//可恢复性.CustomPolicy(OrderRecoverability.CustomRetryPolicy);
可恢复性。延迟(
延迟=>
{
延迟。重试次数(2);
延迟。时间增加(时间跨度从分钟(30));
});
//没有即时重试
可恢复性。立即恢复(
立即=>
{
立即重试次数(0);
});
endpointConfiguration.UsePersistence();
var transport=endpointConfiguration.UseTransport();
transport.Transactions(TransportTransactionMode.SendsAtomicWithReceive);
var conventions=endpointConfiguration.conventions();
习俗
.定义事件(
t=>
t、 命名空间!=null
&&t.Namespace.StartsWith(“Dodo.Fibre.Provisioning.Messages”);

根据要求,我已注释掉超时管理器禁用行,如下所示。 //endpointConfiguration.DisableFeature()

但我不能开始端点,因为我得到下面的错误

2017-08-01 08:45:28.074 FATAL NServiceBus.Hosting.Windows.WindowsHost Start fail
ure
System.Exception: The selected persistence doesn't have support for timeout stor
age. Select another persistence or disable the timeout manager feature using end
pointConfiguration.DisableFeature<TimeoutManager>()
   at NServiceBus.Features.TimeoutManager.Setup(FeatureConfigurationContext cont
ext) in C:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\DelayedDelivery
\TimeoutManager\TimeoutManager.cs:line 34
   at NServiceBus.Features.FeatureActivator.ActivateFeature(FeatureInfo featureI
nfo, List`1 featuresToActivate, IConfigureComponents container, PipelineSettings
 pipelineSettings, RoutingComponent routing) in C:\BuildAgent\work\3206e2123f54f
ce4\src\NServiceBus.Core\Features\FeatureActivator.cs:line 194
   at NServiceBus.Features.FeatureActivator.SetupFeatures(IConfigureComponents c
ontainer, PipelineSettings pipelineSettings, RoutingComponent routing) in C:\Bui
ldAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Features\FeatureActivator.cs:
line 57
   at NServiceBus.InitializableEndpoint.<Initialize>d__1.MoveNext() in C:\BuildA
gent\work\3206e2123f54fce4\src\NServiceBus.Core\InitializableEndpoint.cs:line 60
2017-08-01 08:45:28.074 NServiceBus.Hosting.Windows.WindowsHost启动失败
乌尔
System.Exception:所选持久性不支持超时
年龄。选择另一个持久性或使用end禁用超时管理器功能
pointConfiguration.DisableFeature()
在NServiceBus.Features.TimeoutManager.Setup(FeatureConfigurationContext cont
ext)在C:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\DelayedDelivery中
\TimeoutManager\TimeoutManager.cs:第34行
在NServiceBus.Features.FeatureActivator.ActivateFeature(FeatureInfo featureI
信息,列表'1功能激活,IConfigureComponents容器,管道设置
C:\BuildAgent\work\3206e2123f54f中的管道设置、路由组件路由)
ce4\src\NServiceBus.Core\Features\FeatureActivator.cs:第194行
在NServiceBus.Features.FeatureActivator.SetupFeatures(IConfigureComponents c
C:\Bui中的容器、管道设置管道设置、布线组件布线)
ldAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Features\FeatureActivator.cs:
第57行
在C:\BuildA中的NServiceBus.InitializableEndpoint.d_u1.MoveNext()处
gent\work\3206e2123f54fce4\src\NServiceBus.Core\InitializableEndpoint.cs:第60行

从您的配置代码中,我可以看出您已禁用TimeoutManager,这就是延迟重试未按预期工作的原因,例如

endpointConfiguration.DisableFeature<TimeoutManager>();
endpointConfiguration.DisableFeature();

有什么原因吗?虽然有些传输(如Azure ServiceBus/RabbitMQ)具有内置的延迟传递,但MSMQ没有延迟传递,该工作由超时管理器管理。

从您的配置代码中,我可以看出您已禁用了TimeoutManager,这就是延迟重试无法按预期工作的原因,例如

endpointConfiguration.DisableFeature<TimeoutManager>();
endpointConfiguration.DisableFeature();

有什么原因吗?虽然某些传输(如Azure ServiceBus/RabbitMQ)具有内置的延迟传递,但MSMQ没有延迟传递,并且该工作由超时管理器管理。

您可以共享您的端点配置代码吗?延迟交付与重试不同。您可以在MSMQ上配置第一级/第二级重试以及每次重试之间的延迟。添加了配置。是否可以共享您的端点配置代码?延迟交付与重试不同。您可以在MSMQ上配置第一级/第二级重试以及每次重试之间的延迟。添加了配置。是超时管理器被禁用,因为如果启用,我无法启动nservicebus主机。它抱怨此传输不支持超时。这没有什么意义,因为MSMQ需要超时。请参见此处:可能会将该异常消息添加到上述问题中,或者与我们一起打开支持票证,以便我们可以为您查看。我已编辑并添加了启用超时管理器时出现的错误。啊,现在有意义了:)MSMQ“持久性”仅允许存储订阅信息,而超时不能存储在那里。你需要一个全面的坚持。建议的方法是,如果您在某个地方有一个数据库是NHIbernate或本机SQL持久化。@srisanju还有其他可用的持久化选项,请查看此文档页(右侧的菜单列出了所有选项)。是超时管理器已禁用,因为如果启用,我无法启动nservicebus主机。它抱怨此传输不支持超时。这没有什么意义,因为MSMQ需要超时。请参见此处:可能会将该异常消息添加到上述问题中,或者与我们一起打开支持票证,以便我们可以为您查看。我已编辑并添加了启用超时管理器时出现的错误。啊,现在有意义了:)MSMQ“per