C# NServiceBus Saga-如何配置MillistoSleepBetween消息?

C# NServiceBus Saga-如何配置MillistoSleepBetween消息?,c#,nservicebus,C#,Nservicebus,我是C#的新手,我在一个项目中工作,该项目使用了一个NServiceBus传奇 在saga的逻辑中,如果未达到某个条件,将调用RequestTimeout方法1分钟 问题是这个调用占用了太多的处理器,我认为这是因为TimeoutManager使用默认值10毫秒来检查时间是否已到,并将超时消息发送回saga 有人知道这个millisToSleepBetweenMessages属性是如何改变的吗 提前谢谢!Seba我收集您当前使用的TimeoutManager是2.0或2.5版本。如果是这种情况,T

我是C#的新手,我在一个项目中工作,该项目使用了一个NServiceBus传奇

在saga的逻辑中,如果未达到某个条件,将调用RequestTimeout方法1分钟

问题是这个调用占用了太多的处理器,我认为这是因为TimeoutManager使用默认值10毫秒来检查时间是否已到,并将超时消息发送回saga

有人知道这个millisToSleepBetweenMessages属性是如何改变的吗


提前谢谢!Seba

我收集您当前使用的TimeoutManager是2.0或2.5版本。如果是这种情况,TimeoutManager端点本身就有一个配置文件(Timeout.MessageHandlers.dll.config)和一个appSetting

下面是一个例子:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
  </configSections>

  <MsmqTransportConfig
    InputQueue="timeoutmanager"
    ErrorQueue="error"
    NumberOfWorkerThreads="1"
    MaxRetries="5"
  />

  <appSettings>
    <!-- relevant for a Serialization of "xml" only -->
    <add key="NameSpace" value="http://www.UdiDahan.com"/>

    <!-- can be either "xml", or "binary" -->
    <add key="Serialization" value="xml"/>

    <!-- default is 1000, influences memory use (16 bytes / saga ID) -->
    <add key="MaxSagasIdsToStore" value="10000"/>

    <!-- default is 10, decreasing this value gives better time resolution but higher IO churn -->
    <add key="MillisToSleepBetweenMessages" value="10"/>

  </appSettings>

</configuration>

,其中我有一个在生产场景中使用的超时管理器的实现。请记住,它不是为多个站点、多个时区或任何此类问题而设计的,但它确实解决了被迫放弃准确性以减少流失的问题

我收集您当前使用的TimeoutManager是2.0或2.5版本。如果是这种情况,TimeoutManager端点本身就有一个配置文件(Timeout.MessageHandlers.dll.config)和一个appSetting

下面是一个例子:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
  </configSections>

  <MsmqTransportConfig
    InputQueue="timeoutmanager"
    ErrorQueue="error"
    NumberOfWorkerThreads="1"
    MaxRetries="5"
  />

  <appSettings>
    <!-- relevant for a Serialization of "xml" only -->
    <add key="NameSpace" value="http://www.UdiDahan.com"/>

    <!-- can be either "xml", or "binary" -->
    <add key="Serialization" value="xml"/>

    <!-- default is 1000, influences memory use (16 bytes / saga ID) -->
    <add key="MaxSagasIdsToStore" value="10000"/>

    <!-- default is 10, decreasing this value gives better time resolution but higher IO churn -->
    <add key="MillisToSleepBetweenMessages" value="10"/>

  </appSettings>

</configuration>

,其中我有一个在生产场景中使用的超时管理器的实现。请记住,它不是为多个站点、多个时区或任何此类问题而设计的,但它确实解决了被迫放弃准确性以减少流失的问题

感谢David的回答。只是澄清一下,如果我想使用这个TimeoutManager,我是否必须创建一个新队列来发送所有请求超时的消息,并配置管理器从这个新队列接收消息?是的。超时管理器是一个端点,就像其他端点一样。这意味着它有一个与其他任何队列一样的输入队列,如果缺少,它将创建自己的输入队列。您只需要配置saga端点(在UnicastBusConfig中)就可以在那里发送超时消息。如果您想继续使用stock timeout manager,您可以做的一件事是设置单独的超时管理器,它们有自己的队列,这些队列只因时间分辨率不同而不同。我在我的博客文章中开发的这个,你不需要任何这样的东西。谢谢大卫的回答。只是澄清一下,如果我想使用这个TimeoutManager,我是否必须创建一个新队列来发送所有请求超时的消息,并配置管理器从这个新队列接收消息?是的。超时管理器是一个端点,就像其他端点一样。这意味着它有一个与其他任何队列一样的输入队列,如果缺少,它将创建自己的输入队列。您只需要配置saga端点(在UnicastBusConfig中)就可以在那里发送超时消息。如果您想继续使用stock timeout manager,您可以做的一件事是设置单独的超时管理器,它们有自己的队列,这些队列只因时间分辨率不同而不同。你不需要任何这样的东西,我在我的博客文章中开发的。