NServiceBus:saga-timeouts 后存储队列中的消息数量增加

标签 nservicebus nservicebus4 nservicebus-distributor nservicebus-sagas

首先关于设置的一些信息:

  • 我们正在运行 NServiceBus v4.6.3
  • 分发服务器在具有集群队列的集群机器上运行。
  • TimeoutManager 在工作器上禁用,在分发器上启用。

  • 我们正在经历什么
  • 处理 Saga-timeout 时,存储队列中的消息数增加 1。
  • 当一条消息被延迟时,存储队列中的消息数增加一。

  • 我们知道什么

    超时消息直接传递到特定的本地队列(在请求超时的服务器上)而不是集群队列。这绕过了常规路径,该路径涉及从存储队列中删除消息并在工作器上传递目标队列。工作人员不知道这一点,并在处理超时消息后报告说它已准备好处理新消息。

    这种行为的原因是存储在 TimeoutData 中的目标队列被设置为工作程序上的本地队列,而不是集群队列。下面是一个例子:
    {
      "Destination": {
        "Queue": "DemoService",
        "Machine": "STAGESVC04"
      },
      "SagaId": "40bf1976-dab0-48a3-8e20-a39d00b59bb9",
      "State": "PD94bWwgdmVyc2lvbj0iMS4wIiA/Pg0KPE1lc3NhZ2VzIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zPSJodHRwOi8vdGVtcHVyaS5uZXQvUmlrc3RvdG8uU2VydmljZS5CZXR0aW5nLk5TZXJ2aWNlQnVzSGFuZGxlcnMuU2FnYXMuVGVzdFNhZ2EiPgo8SVRoZVRpbWVvdXQ+CjwvSVRoZVRpbWVvdXQ+CjwvTWVzc2FnZXM+DQo=",
      "Time": "2014-09-05T09:02:14.2110980Z",
      "CorrelationId": "60558fe4-7111-4fe3-a4ff-a39d00b5c060\\0",
      "OwningTimeoutManager": "DemoService",
      "Headers": {
        "NServiceBus.MessageId": "60558fe4-7111-4fe3-a4ff-a39d00b5c060",
        "NServiceBus.CorrelationId": "60558fe4-7111-4fe3-a4ff-a39d00b5c060",
        "NServiceBus.OriginatingEndpoint": "DemoService",
        "$.diagnostics.originating.hostid": "23d0f908b1691ba8111e8ac282989a3d",
        "NServiceBus.MessageIntent": "Send",
        "NServiceBus.Version": "4.6.3",
        "NServiceBus.TimeSent": "2014-09-05 09:01:44:211098 Z",
        "NServiceBus.OriginatingMachine": "STAGESVC04",
        "NServiceBus.SagaId": "40bf1976-dab0-48a3-8e20-a39d00b59bb9",
        "NServiceBus.IsSagaTimeoutMessage": "True",
        "NServiceBus.SagaType": "DemoService.NServiceBusHandlers.Sagas.TestSaga.TestSaga, DemoService.NServiceBusHandlers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
        "NServiceBus.OriginatingSagaId": "40bf1976-dab0-48a3-8e20-a39d00b59bb9",
        "NServiceBus.OriginatingSagaType": "DemoService.NServiceBusHandlers.Sagas.TestSaga.TestSaga, DemoService.NServiceBusHandlers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
        "NServiceBus.ContentType": "text/xml",
        "NServiceBus.EnclosedMessageTypes": "DemoService.NServiceBusHandlers.Sagas.TestSaga.ITheTimeout, DemoService.NServiceBusHandlers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
        "NServiceBus.RelatedTo": "232aa1a9-dea2-4d98-9251-a39d00b59bc7",
        "NServiceBus.ConversationId": "4661130d-a961-4b1d-abda-a39d00b59beb",
        "WinIdName": "",
        "CorrId": "60558fe4-7111-4fe3-a4ff-a39d00b5c060\\0",
        "NServiceBus.IsDeferredMessage": "True",
        "NServiceBus.Temporary.DelayDeliveryWith": "00:00:30",
        "NServiceBus.Timeout.Expire": "2014-09-05 09:02:14:211098 Z",
        "NServiceBus.Timeout.RouteExpiredTimeoutTo": "DemoService@STAGESVC04",
        "NServiceBus.Timeout.ReplyToAddress": "DemoService@STAGEMSMQ01"
      }
    }
    

    我不确定我们遇到的是 NServiceBus 中的错误还是配置错误。有人知道吗?

    最佳答案

    我已在 NServiceBus 将此问题注册为问题,他们已将其确认为错误。

    https://github.com/Particular/NServiceBus/issues/2353

    关于NServiceBus:saga-timeouts 后存储队列中的消息数量增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25684256/

    相关文章:

    NServiceBus Distributor - 如何拆分应用程序

    NServiceBus + Common.Logging + NLog

    message-queue - 尝试使用Nservicebus时发生错误

    design-patterns - 命令查询分离验证重试

    c# - NServiceBus 发布/订阅

    c# - NServiceBus - 基于内容的路由和审计 - 我的方法可以吗?

    c# - NServiceBus 自定义消息处理程序类型

    使用 .XmlSerializer() 的 NServiceBus 4 配置错误

    ravendb - 没有 RavenDB 的 NServiceBus 4

    c# - 第一次发送消息到错误队列