【问题标题】:NService bus message delay problemNServicebus消息延迟问题
【发布时间】:2010-09-21 08:10:51
【问题描述】:

昨天我做了一个生产模拟。结果哪里不好。两台服务器连接正常。有时会有很大的延迟,大约 5-10 分钟。我发信息,二,三……二十,对方没有收到。然后繁荣,所有消息都在那里,回复发送给发件人。另一种情况是当我发送 10 条消息时,对方暂时收到并回复。但是发件人没有收到回复。 5-10 分钟 BOOM 后,回复就在这里。

发生了什么事。请帮帮我。

=====================
编辑: 两台服务器都是windows XP sp3。两台计算机都与 openVPN 连接。 NSB 是最新版本。

UI duplex => 应用服务器 发布/订阅 => 反规范化器(只读数据库)

昨天我只测试了双工。在 1PC 环境中,一切顺利。当双工准备好后,我将测试第三部分。

【问题讨论】:

  • 你能提供更多关于环境的信息吗?服务器的类型/操作系统以及网络是如何配置的?您是否使用全双工模式?另外,什么版本的 NSB?
  • 可能是 VPN 问题。机器之间有延迟吗?此外,您可能需要查看 DTCPing 以确保 MSDTC 正常工作:microsoft.com/downloads/en/…。我还会在 MSDTC 上进行日志记录。事件日志中有任何内容吗?
  • 连接正常。没有其他错误。只是时不时地无故拖延。我确信问题出在 NSB 中,因为我注意到了一种模式,例如,当我删除所有队列并为双方重新开始时。我认为这是某种初始化延迟,之后总线会正常工作,但我错了,延迟又出现了。
  • 如果您完全删除队列而不是清除它们,那么当 NSB 启动时将会有延迟,因为它必须在发送任何事务之前在两侧创建队列。任何其他缓慢可能是由于机器之间的日志记录级别或延迟。我会尝试清除而不是吹走它们。
  • 我很想听听任何解释。今天我注意到我们的生产环境(windows server 2008,2-node cluster)也有同样的延迟。测试系统没有延迟(完全相同的硬件,仅比生产系统少一点内存)。在两个集群上,消息每 110 秒发送一次。它在测试系统上正常工作,在生产系统上看起来像消息被收集然后一起发送。在那之后,10 或 15 分钟,再次没有任何反应。然后几条消息再次到达。

标签: nservicebus


【解决方案1】:

您使用活动目录吗?我记得读过 AD 可能会导致 MSMQ 出现问题。类似于某些查找表的东西很大并且会减慢速度......无论如何无法准确记住,但只是一个想法。

否则,我建议先将两个端点都放在一台计算机上,然后从那里开始工作。慢慢添加变量,直到它再次中断。

编辑:尝试将此行添加到您的配置中:

.RunCustomAction(() => NServiceBus.Configure.Instance.Configurer.ConfigureProperty<MsmqTransport>(
                    mt => mt.SecondsToWaitForMessage, 2))

如果您使用主机,我不确定您如何配置它。我的配置如下:

    _Bus = NServiceBus.Configure.With()
                  .DefaultBuilder()
                  .Log4Net(new MyLogAppender())
                  .XmlSerializer()
                  .MsmqTransport()
                      .IsTransactional(true)
                      .PurgeOnStartup(true)
                  .UnicastBus()
                      .ImpersonateSender(false)
                      .DoNotAutoSubscribe()
                      .LoadMessageHandlers()
                  .RunCustomAction(() =>
                    NServiceBus.Configure.Instance.Configurer.ConfigureProperty<MsmqTransport>(
                    mt => mt.SecondsToWaitForMessage, 2))
                  .CreateBus()
                  .Start();

我有一个问题,我的 MSMQ 队列会定期超时,从而造成延迟。然而,默认超时仅以秒为单位(15 秒 iirc?)。永远无法弄清楚它为什么会发生,我认为这在 MSMQ 库中很有趣。我真的怀疑同样的问题会导致 10 分钟以上的延迟,但值得一试。

【讨论】:

  • 无广告。但我会尝试你的建议并在这里报告结果。
  • 您还应该尝试在遇到问题的一段时间内连续运行 ping(即 ping ip.address -t),以检查是否发生任何网络拥塞/延迟。
  • 是的,先生,这是我真正做的第一件事。不存在这样的问题。
猜你喜欢
  • 2014-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
相关资源
最近更新 更多