1

我的发布/订阅实现有问题。我正在从 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,这样它就不会出现未来的问题,因为目标是尽可能快。

4

0 回答 0