【问题标题】:How to retrieve messages from turnout queue using MassTransit?如何使用 MassTransit 从投票队列中检索消息?
【发布时间】:2017-02-17 01:39:02
【问题描述】:

我正在尝试按照这篇文章http://docs.masstransit-project.com/en/latest/advanced/turnout.html 使用 MassTransit 和 Azure 服务总线创建应用程序。

我在 Azure 服务总线中启动应用程序后创建了两个队列(其中一个已过期)。在我执行订阅者之后,创建了投票队列,并且消息从 main 移动到了这个队列。如果订阅者工作,我可以检索消息。如果我停止订阅者(终止进程或关闭机器)消息仍在投票队列中。下次我执行订阅者时,它会创建新的投票队列,并且我不会检索已处理但未完成的消息。那么,我怎样才能不丢失消息呢?以及如何设置在一个节点中处理的最大消息数限制?

_busControl = Bus.Factory.CreateUsingAzureServiceBus(cfg =>
        {
            var host = cfg.Host("********", h =>
            {
                    //h.OperationTimeout = TimeSpan.FromMinutes(1);
            });
            cfg.MaxConcurrentCalls = 1;
            cfg.UseServiceBusMessageScheduler();
            cfg.TurnoutEndpoint<ISimpleRequest>(host, "test_longruning",
                e =>
                {
                    e.SuperviseInterval = TimeSpan.FromSeconds(30);
                    e.PartitionCount = 1;
                    e.SetJobFactory(async context =>
                        {
                            Console.WriteLine($"{DateTime.Now} Start Message: {context.Command.CustomerId}");
                            await Task.Delay(TimeSpan.FromMinutes(7), context.CancellationToken);
                            Console.WriteLine($"{DateTime.Now} End Message: {context.Command.CustomerId}");
                        });
                });
        });

【问题讨论】:

    标签: c# .net azureservicebus masstransit


    【解决方案1】:

    首先,我要警告您,目前 Turnout 还处于前期制作阶段。虽然它在愉快的道路上工作,但服务故障的处理还没有达到标准。虽然消息生存时间设置应该以命令返回正确的队列结束,但它尚未经过广泛测试。

    也就是说,您可以使用 ServiceBusExplorer 将消息移回正确的队列,这就是我的做法。它是手动的,但它是唯一真正让您完全控制服务总线环境的工具。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      相关资源
      最近更新 更多