我正在对使用2个超时的传奇进行一些压力测试。在测试期间,大约21K传奇的被创造。所以这将意味着42K超时,但我注意到,传奇的timeoutsdispatcher队列正在充斥着数以百计的数千条消息,直到它崩溃,因为MSMQ存储限制被击中。NServiceBus Timeoutsdispatcher队列在压力测试期间被消息充斥
自从我将持久性机制从RavenDB切换到SQL Server后,我看到了这种行为。
有没有人有一个想法什么可能是错的?
交通:MSMQ
持久性:使用NHibernate的 套餐:
NHibernate version 4.0.4.4000
NServiceBus version 5.2.14
NServiceBus.Host version 6.0.0
NServiceBus.Log4Net version 1.0.0
NServiceBus.NHibernate version 6.2.7
测试设置:
*端点1发送22000个消息到端点2.
*端点2名的主机开始工作一段传奇通过那个消息。
*每个传奇发布一个事件,然后请求2个超时:1在4分钟,1在10分钟。
观察到的行为:
*端点1在一分钟内发送了22K条消息。
*端点2(传奇)每秒处理5到10条消息。
* 4分钟后,第一次超时被触发,而端点2仍在处理来自其队列的消息,因此仍在创建新的saga实例。
*从那一刻开始,传奇端点的timeoutsdispatcher队列正在充满消息。
* 10分钟左右后,timeoutsdispatcher队列已经包含超过170K条消息,并且仍然填满。
*继续进行,直到端点2崩溃,因为命中MSMQ存储限制或处理来自输入队列的所有消息。如果后者发生在第一位,则timeoutsdispatcher队列消息计数开始减少,直到最终达到0.
是的,我在同一台机器上进行压力测试,就像我先用RavenDb做的那样:我的带有嵌入式SSD的本地笔记本电脑。消息处理本身没有任何问题。传奇端点运行良好,每秒处理5到10条消息。我只是看到,我的传奇的timeoutspispatcher队列正在充斥着消息,这是我创建的传奇的火焰的2个超时中的第一个。 –
我添加了我的测试设置和观察的描述。 –
我已经更新了我的答案,也许它有帮助。 –