Weryfikacja wiadomości w kolejce shadow
Na potrzeby analizy wiadomości emitowanych (publish) na kolejki biznesowe stworzone mogą zostać kolejki shadow. Ich zadaniem jest przechowywanie tej samej listy wiadomości jak kolejka biznesowe (z której te są konsumowane przez proces odbierający).
Wymagane
Zainstalowany management plugin,
Zainstalowany rabbitmqadmin
Krok 1. Zrzucenie listy wiadomości z kolejki do pliku tekstowego poprzez przekierowanie na plik
rabbitmqadmin --username=XXX --password=XXX get queue=<QueueName> ackmode=ack_requeue_true count=<X>
<QueueName> to nazwa kolejki audytowej
<X> to liczba wiadomości, które mają być pobrane
Parametr requeue=true powoduje że wiadomości po zrzuceniu do pliku nie są usuwane z kolejki.
Krok 2. Wyszukanie wiadomości w kolejce na bazie utworzonego pliku z wykorzystaniem przekazanego identyfikatora (userId, accountId etc).
Zapytania sprawdzające jakie zdarzenie były emitowane dla wskazanego usera
db.getCollection('<collectionName>').find(
{
"machine.entryAssembly":"Psd2Hub.Services.PushService.Api, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
"message":{$regex:/(EmitTransactionsSyncFinished |EmitAccountsSyncStarted |EmitAccountsSyncFinished |EmitSyncFinished |EmitAccountsSyncFailed |EmitTransactionsSyncFailed )MediatR request/i},
"executionData.context.userId":"<USER_ID>"
}
).sort({date:-1})
Przykładowy log:
{
"_id" : ObjectId("60def9c357c5420001129c5b"),
"level" : "Debug",
"logger" : "BanqwareLogger",
"message" : "EmitAccountsSyncStarted MediatR request.",
"date" : ISODate("2021-07-02T11:34:27.390Z"),
"type" : "Log Message",
"executionData" : {
"ignoreLog" : false,
"externalUserId" : null,
"id" : "dd37e41c-3d52-41ac-884f-fdbb5a5d4860",
"logId" : "091b1c74-bdc8-4046-8678-4009406f23e2",
"tenantId" : null,
"isMultitenancyMode" : false,
"invoker" : "Api",
"context" : {
"userId" : "regression_AISP_BIGBPLPW_2021-07-02T11:34:07.571Z",
"consentId" : "5a3eb3de-2598-42e7-a760-b931ce523763",
"accountId" : null,
"paymentId" : null,
"sessionId" : "c05babe49b964075d4b108d93d497e5d"
},
"extraData" : null,
"buildId" : "47366"
},
"details" : {
"request" : {
"sessionExternalId" : "externalSession_regression_AISP_BIGBPLPW_2021-07-02T11:34:07.571Z",
"userId" : "207599c5-ce82-4bdb-84b7-2a6090cf3de9",
"sessionId" : "c05babe4-9b96-4075-d4b1-08d93d497e5d"
},
"documentLength" : 226
},
"machine" : {
"entryAssembly" : "Psd2Hub.Services.PushService.Api, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
"machineName" : "fc26fb057daa",
"processName" : "dotnet",
"memorySize" : 451936256
}
}
Po pobraniu komunikatów dla wskazanego
<USER_ID>jak powyżej należy wybrać komunikaty odpowiadające analizowanej sesji, po sessionExternalId.
Weryfikacja komunikatów w danej sesji (kompletność i liczność występowania)
Na tej podstawie można zweryfikować kompletność i liczność występowania poszczególnych komunikatów i kolejność ich emitowania (po date).
W przypadku duplikatów należy zweryfikować czy zduplikowane wiadomości są wysyłane z tej samej instancji PushService (wskazuje na to pole machineName)
Uwaga, w przypadku uruchomienie więcej niż jednej instancji PushService komunikaty mogą być wysyłane niezależnie przez poszczególne instancje. Wdrażane będzie dodatkowe zabezpieczenie. Do tego momentu prosimy o aktywowanie tylko jednej instancji.
Nazwy komunikatów
Lista komunikatów emitowanych na kolejki:
EmitTransactionsSyncFinished - komunikat emitowany dla MWD na koniec pobierania transakcji
EmitAccountsSyncStarted - komunikat emitowany dla MWD na początek pobierania rachunków
EmitAccountsSyncFinished - komunikat emitowany dla MWD na koniec pobierania rachunków
EmitSyncFinished- komunikat emitowany dla MWD na koniec sesji AIS
EmitAccountsSyncFailed- komunikat emitowany dla MWD na błąd pobierania rachunków
EmitTransactionsSyncFailed- komunikat emitowany dla MWD na błąd pobierania transakcji
EmitConsent- komunikat emitowany przy zmianie aktualizacji zgody (consent)