Nservicebus delayed retry with MSMQ -
can enable delayed retries nservicebus , msmq transport. when it throw warning , move message error queue.
"recoverability policy requested delayedretry delayed delivery capability not available current endpoint configuration. moving message error queue instead."
but according nservicebus documentation tells delayed retry can performed if delayed delivery supported. , have below delayed delivery.
"nservicebus provides delayed deliver feature transports don't have native support delayed message delivery, i.e. msmq , sql server transports. "
endpointconfiguration.sendfailedmessagesto("error"); endpointconfiguration.auditprocessedmessagesto("audit"); endpointconfiguration.disablefeature<timeoutmanager>(); var messageprocessingconcurrency = configurationmanager.appsettings["nservicebusmessageprocessingconcurrency"]; endpointconfiguration.limitmessageprocessingconcurrencyto(int.parse(messageprocessingconcurrency)); //configuring delayed retries var recoverability = endpointconfiguration.recoverability(); //recoverability.custompolicy(orderrecoverability.customretrypolicy); recoverability.delayed( delayed => { delayed.numberofretries(2); delayed.timeincrease(timespan.fromminutes(30)); }); //no imediate retries recoverability.immediate( immediate => { immediate.numberofretries(0); }); endpointconfiguration.usepersistence<msmqpersistence>(); var transport = endpointconfiguration.usetransport<msmqtransport>(); transport.transactions(transporttransactionmode.sendsatomicwithreceive); var conventions = endpointconfiguration.conventions(); conventions .definingeventsas( t => t.namespace != null && t.namespace.startswith("dodo.fibre.provisioning.messages"));
as requested have commented out timeout manager disable line below. // endpointconfiguration.disablefeature();
but can not start endpoint getting below error.
2017-08-01 08:45:28.074 fatal nservicebus.hosting.windows.windowshost start fail ure system.exception: selected persistence doesn't have support timeout stor age. select persistence or disable timeout manager feature using end pointconfiguration.disablefeature<timeoutmanager>() @ nservicebus.features.timeoutmanager.setup(featureconfigurationcontext cont ext) in c:\buildagent\work\3206e2123f54fce4\src\nservicebus.core\delayeddelivery \timeoutmanager\timeoutmanager.cs:line 34 @ 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 @ 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 @ nservicebus.initializableendpoint.<initialize>d__1.movenext() in c:\builda gent\work\3206e2123f54fce4\src\nservicebus.core\initializableendpoint.cs:line 60
from configuration code can see have disabled timeoutmanager , that's reason delayed retries not working expected e.g.
endpointconfiguration.disablefeature<timeoutmanager>();
any reason that? while transport azure servicebus / rabbitmq have built-in delayed-delivery, msmq not have , work managed timeout manager.
Comments
Post a Comment