我们遇到了一个问题,我们使用 sagas 延迟消息以通过版本控制变量及时执行。saga 获得执行日期,延迟消息,并在最后一条延迟消息后发送超时以取消 saga 集 5 天。这允许整个公司的人员在超时前的五天内使用 saga 数据解决任何错误。
我们还提供了在业务规则更改的情况下重新排队延迟消息的选项。在过去的几个月里,我们一直在使用这种方法并取得了很大的成功。最近有一个业务规则更改,它推迟了特定客户端的所有消息。虽然所有 saga 数据看起来都不错,但似乎它正在重置超时以在以后过期。当延迟消息执行时,它表明传奇不再存在,当我看到这个时,我也看到了这个。此外,我注意到延迟消息不携带 SagaID。我证实这并不是什么新鲜事,因为一堆“仍在排队”的消息也不包含 SagaID,但它们似乎正在成功执行。
我的问题是关于读取超时和延迟消息数据的能力。我注意到它们看起来是加密的,我看到的是 NServiceBus 构建的消息。我很好奇是否有办法读取 NServiceBus 创建的消息。
{
"Destination": {
"Queue": "clientdata",
"Machine": "cnapp04"
},
"SagaId": "00000000-0000-0000-0000-000000000000",
"State": "PD94bWwgdmVyc2lvbj0iMS4wIiA/Pg0KPE1lc3NhZ2VzIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zPSJodHRwOi8vdGVtcHVyaS5uZXQvTHNyLk1pbGl0YXJ5U2VhcmNoLlNlYXJjaC5NZXNzYWdlcyI+CjxRdWV1ZWRTZWFyY2hDb21tYW5kPgo8U2FnYUlEPmIxNmM4NDk5LTc",
"Time": "2013-09-09T09:00:00.0000000Z",
"CorrelationId": null,
"OwningTimeoutManager": "ClientData",
"Headers": {
"WinIdName": "COMPANY\\user_name",
"NServiceBus.Timeout.Expire": "2013-09-09 09:00:00:000000 Z",
"NServiceBus.OriginatingSagaId": "b16c8499-72f6-4cea-89e1-a18e0101eb82",
"NServiceBus.OriginatingSagaType": "ClientData.Search.Handlers.SalesPolicy.SaleHandler, ClientData.Search, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
"NServiceBus.EnclosedMessageTypes": "ClientData.Search.Messages.QueuedSearchCommand, ClientData.Search, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
"NServiceBus.RelatedTo": "db644e60-5ba1-4d26-a4ef-876855581bd5\\42719333",
"NServiceBus.TimeSent": "2013-04-01 17:34:42:712194 Z",
"NServiceBus.Version": "3.2.7",
"CorrId": null
}
}
此外,如何利用 CorrelationID?我没有看到这是如何设置的。