我的发布/订阅实现有问题。我正在从 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 加载实际的订阅者程序集,但新版本进入休眠状态。我更改了文件夹结构,现在订阅者按预期工作。所以我使用的配置工作得很好,但我确实从我的设置中删除了 MaximumMessageThroughputPerSecond,这样它就不会出现未来的问题,因为目标是尽可能快。