バージョン管理変数を使用してタイムリーに実行するためにメッセージを延期するサガを使用している場合に問題が発生しています。サガは実行日を取得し、メッセージを延期し、最後に延期されたメッセージから 5 日間設定されたサガをキャンセルするタイムアウトを送信します。これにより、会社全体の人々が、タイムアウトの 5 日前までにサガ データを使用してエラーを解決できます。
ビジネス ルールが変更された場合に備えて、延期されたメッセージを再度キューに入れるオプションも用意されています。私たちはこの方法を利用して、過去数か月にわたって多くの成功を収めてきました。最近、ビジネス ルールが変更され、特定のクライアントへのすべてのメッセージが延期されました。すべてのサガ データは問題ないように見えますが、後日期限切れになるようにタイムアウトをリセットしているようです。遅延メッセージが実行されると、サガが存在しないことが示されます。これを見ると、これもわかります。さらに、遅延メッセージには 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 をどのように利用するのでしょうか? これがどのように設定されているかわかりません。