我的发布/订阅实现有问题。我正在从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();
我做了一个原始测试,我的开发环境的差异是2.6版本每秒处理大约80条消息,而4.0.4版本每秒处理大约8条消息 - 这真的非常糟糕。所以这里有些不对劲我似乎无法找到它是什么。
编辑:看起来问题是从我们的项目结构生成的,由于某种原因,旧版本的NServiceBus不介意我们的结构方法使用通用的订阅者使用MEF来加载实际的subsrciber-assemblies但是新版本已经去了睡觉。我更改了文件夹结构,现在订阅者按预期工作。所以我使用的配置工作得很好,但我确实从我的设置中删除了MaximumMessageThroughputPerSecond,因此它不会出现未来的问题,因为目标是尽可能快。