NServiceBus MSMQ,如何阻止邮件传输到错误队列

时间:2017-07-04 12:42:25

标签: nservicebus msmq

我使用NServiceBus进行概念验证。我正在使用它与MSMQ。我有一个发送消息的Web应用程序。此消息将由订阅者或消息处理程序处理。当我关闭消息处理程序时,消息将在几次重试后发送到Error Queue。

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

这是我在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));
    }

这是Controller中我向终端发送消息的部分。

[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();
        }

我的目标是只要消息处理程序没有恢复工作,就将未处理的消息保留在输入队列中。目前,如果消息处理程序已关闭,它将在重试到错误队列后发送消息。

我正在使用NServiceBus 6.x

提前致谢

0 个答案:

没有答案