Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用MassTransit从道岔队列检索消息?_C#_.net_Azureservicebus_Masstransit - Fatal编程技术网

C# 如何使用MassTransit从道岔队列检索消息?

C# 如何使用MassTransit从道岔队列检索消息?,c#,.net,azureservicebus,masstransit,C#,.net,Azureservicebus,Masstransit,在本文之后,我尝试使用MassTransit和Azure Service Bus创建一个应用程序 在Azure Service Bus中启动应用程序后,我创建了两个队列(其中一个已过期)。在我执行之后,创建了订阅服务器,并将消息从主队列移动到此队列。如果订阅服务器工作,我可以检索消息。若我停止仍在队列中的订户(终止进程或关闭机器)消息。下次执行subscriber时,它将创建新的道岔队列,并且我不会检索已处理但尚未完成的消息。那么,我怎样才能不丢失信息呢?以及如何设置在一个节点中处理的最大消息数

在本文之后,我尝试使用MassTransit和Azure Service Bus创建一个应用程序

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

_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}");
                        });
                });
        });
\u busControl=Bus.Factory.CreateUsingAzureServiceBus(cfg=>
{
var host=cfg.host(“*******”,h=>
{
//h、 OperationTimeout=TimeSpan.FromMinutes(1);
});
cfg.MaxConcurrentCalls=1;
cfg.UseServiceBusMessageScheduler();
cfg.TurnoutEndpoint(主机,“测试”,
e=>
{
e、 SuperviseInterval=从秒开始的时间跨度(30);
e、 分区计数=1;
e、 SetJobFactory(异步上下文=>
{
WriteLine($“{DateTime.Now}开始消息:{context.Command.CustomerId}”);
wait Task.Delay(TimeSpan.frommins(7),context.CancellationToken);
WriteLine($“{DateTime.Now}结束消息:{context.Command.CustomerId}”);
});
});
});

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

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