Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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
NServiceBus 4.0.4用户速度非常慢_Nservicebus_Subscriber_Nservicebus4 - Fatal编程技术网

NServiceBus 4.0.4用户速度非常慢

NServiceBus 4.0.4用户速度非常慢,nservicebus,subscriber,nservicebus4,Nservicebus,Subscriber,Nservicebus4,我的发布/订阅实现有问题。我正在从NServiceBus 2.6版升级到4.0.4版,就我从日志中了解到的情况来看,一切都正常,但订阅者处理消息的速度非常慢。我使用NServiceBus.Host.exe 在旧的实现中,我将线程配置如下: <MsmqTransportConfig ErrorQueue="error" NumberOfWorkerThreads="40" MaxRetries="5" /> 信息以很快的速度传递 在新的实现中,我尝试对配置

我的发布/订阅实现有问题。我正在从NServiceBus 2.6版升级到4.0.4版,就我从日志中了解到的情况来看,一切都正常,但订阅者处理消息的速度非常慢。我使用NServiceBus.Host.exe

在旧的实现中,我将线程配置如下:

<MsmqTransportConfig 
   ErrorQueue="error" 
   NumberOfWorkerThreads="40" 
   MaxRetries="5" />

信息以很快的速度传递

在新的实现中,我尝试对配置进行必要的更改:

<TransportConfig
    MaximumConcurrencyLevel="10"
    MaxRetries="5"
    MaximumMessageThroughputPerSecond="500"/>

我遗漏了什么重要的东西吗

我有一个有效的许可证,所以我应该有最大线程在使用。我没有RavenDB或SQL,实现使用MSMQ,我在订阅服务器配置代码中禁用了Sagas和TimeoutManager:

NServiceBus.SetLoggingLibrary.Log4Net(log4net.Config.XmlConfigurator.Configure);
Configure.Features.Disable<Sagas>();

NServiceBus.Configure.With()
   .DefaultBuilder()
   .UseTransport<Msmq>()
   .DisableTimeoutManager()
   .UnicastBus()
   .LoadMessageHandlers(); 
NServiceBus.SetLoggingLibrary.Log4Net(Log4Net.Config.XmlConfigurator.Configure);
Configure.Features.Disable();
NServiceBus.Configure.With()
.DefaultBuilder()
.UseTransport()
.DisableTimeoutManager()
.UnicastBus()
.LoadMessageHandlers();
我做了一个粗略的测试,我的开发环境中的差异是2.6版本每秒处理大约80条消息,4.0.4版本每秒处理大约8条消息,这真的很糟糕。所以这里出了点问题,我就是找不到问题所在


编辑:看起来问题是从我们的项目结构中产生的,出于某种原因,旧版本的NServiceBus不介意我们使用通用Subscriber的结构方法,该方法使用MEF加载实际Subscriber程序集,但新版本进入休眠状态。我更改了文件夹结构,现在订阅服务器按预期工作。因此,我使用的配置工作得很好,但我确实从设置中删除了MaximumMessageGetThroughPutPerSecond,这样以后就不会出现问题,因为目标是尽可能快。

如果要尽可能快地运行,就不需要MaximumMessageGetThroughPutPerSecond。为在这么多线程上强制执行该限制而进行的数学运算所需的锁定可能是您的问题的一部分。@David谢谢您的提示!我从配置中删除了不必要的MaximumMessageThroughputPerSecond,但订阅服务器仍然运行缓慢。日志显示处理有中断,比如停止片刻,然后一次性处理少量消息,然后再次停止。这让我很困惑,因为旧版本没有这样做。当你的订户启动时,你能检查一下它使用的是什么许可证吗?i、 e.max,还是试用版还是基本版?只是为了验证端点确实正在使用许可证。这应该在日志中,并且是端点启动时的第一个检查之一。