NServiceBus MSMQ,如何停止向错误队列传输消息

NServiceBus MSMQ,如何停止向错误队列传输消息,nservicebus,msmq,Nservicebus,Msmq,我正在使用NServiceBus进行概念验证。我将它与MSMQ一起使用。我有一个发送消息的Web应用程序。此消息将由订阅服务器或消息处理程序处理。当我关闭消息处理程序时,经过几次重试后,消息将被发送到错误队列 我不想将其发送到错误队列,我想将消息保留在输入队列中,只要处理程序再次联机,并从输入队列自动处理该消息。若由于任何错误而无法从处理程序处理消息,它必须将消息传输到错误队列 这是我在MVC应用程序Global.asax中的配置 private void ConfigureServiceBus

我正在使用NServiceBus进行概念验证。我将它与MSMQ一起使用。我有一个发送消息的Web应用程序。此消息将由订阅服务器或消息处理程序处理。当我关闭消息处理程序时,经过几次重试后,消息将被发送到错误队列

我不想将其发送到错误队列,我想将消息保留在输入队列中,只要处理程序再次联机,并从输入队列自动处理该消息。若由于任何错误而无法从处理程序处理消息,它必须将消息传输到错误队列

这是我在MVC应用程序Global.asax中的配置

private void ConfigureServiceBus()
    {
        var endpointConfiguration = new EndpointConfiguration("Samples.Mvc.Endpoint");

        endpointConfiguration.UseSerialization<JsonSerializer>();
        endpointConfiguration.UsePersistence<InMemoryPersistence>();
        endpointConfiguration.UseTransport<MsmqTransport>();
        endpointConfiguration.SendFailedMessagesTo("error");
        endpointConfiguration.AuditProcessedMessagesTo("audit");
        var recoverability = endpointConfiguration.Recoverability();
        recoverability.Delayed(
            delayed =>
            {
                delayed.NumberOfRetries(2);
                delayed.TimeIncrease(TimeSpan.FromSeconds(2));
            });
        endpointConfiguration.EnableInstallers();
        endpoint = Endpoint.Start(endpointConfiguration).GetAwaiter().GetResult();
        //var endpointInstance = Endpoint.Start(endpointConfiguration).ConfigureAwait(false);
        var mvcContainerBuilder = new ContainerBuilder();
        mvcContainerBuilder.RegisterInstance(endpoint);
        // Register MVC controllers.
        mvcContainerBuilder.RegisterControllers(typeof(MvcApplication).Assembly);
        var mvcContainer = mvcContainerBuilder.Build();
        DependencyResolver.SetResolver(new AutofacDependencyResolver(mvcContainer));
    }
private void ConfigureServiceBus()
{
var endpointConfiguration=newendpointconfiguration(“Samples.Mvc.Endpoint”);
endpointConfiguration.UseSerialization();
endpointConfiguration.UsePersistence();
endpointConfiguration.UseTransport();
endpointConfiguration.SendFailedMessageTo(“错误”);
endpointConfiguration.AuditProcessedMessageTo(“审核”);
var recoverability=endpointConfiguration.recoverability();
可恢复性。延迟(
延迟=>
{
延迟。重试次数(2);
延迟。时间增加(时间跨度从秒(2)开始);
});
endpointConfiguration.EnableInstallers();
endpoint=endpoint.Start(endpointConfiguration.GetAwaiter().GetResult();
//var endpointInstance=Endpoint.Start(endpointConfiguration).ConfigureAwait(false);
var mvcContainerBuilder=new ContainerBuilder();
mvcContainerBuilder.RegisterInstance(端点);
//注册MVC控制器。
mvcContainerBuilder.RegisterController(类型化(MVCAPApplication.Assembly));
var mvcContainer=mvcContainerBuilder.Build();
SetResolver(新的AutofacDependencyResolver(mvcContainer));
}
这是控制器中向端点发送消息的部分

[HttpPost]
        public async Task<ActionResult> Contact(ContactModel c)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var message = new ContactMessage()
                    {
                        Comment = c.Comment,
                        Email = c.Email,
                        FirstName = c.FirstName,
                        LastName = c.LastName,
                        TransectionId = Guid.NewGuid()
                    };

                    await endpoint.Send("Samples.Mvc.Endpoint", message).ConfigureAwait(false);

                    return View("Success");
                }
                catch (Exception ex)
                {
                    return View("Error");
                }
            }
            return View();
        }
[HttpPost]
公共异步任务联系人(ContactModel c)
{
if(ModelState.IsValid)
{
尝试
{
var message=新联系人消息()
{
注释,
电子邮件,
FirstName=c.FirstName,
LastName=c.LastName,
transactionId=Guid.NewGuid()
};
wait endpoint.Send(“Samples.Mvc.endpoint”,message).configurewait(false);
返回视图(“成功”);
}
捕获(例外情况除外)
{
返回视图(“错误”);
}
}
返回视图();
}
我的目标是,只要消息处理程序未恢复工作,就将未处理的消息保留在输入队列中。当前,若消息处理程序关闭,它将在重试后将消息发送到错误队列

我正在使用NServiceBus 6.x


提前感谢

这正是应该发生的事情。您能否同时提供“处理程序”端的代码和配置?如果您通过电子邮件向特定的.net提供支持,我很乐意与您联系并帮助您进行POC,请将电子邮件发送给Sean FarmarI,他认为您可以使用重试机制。我也经历过这个问题。如果传输是MSMQ,我们总是使用QueueExplorer在不同的批中重播消息。