Skip to main content

Diagnostyka komunikatów wysyłanych na kolejki

Maxime avatar
Written by Maxime
Updated over 4 months ago

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)

Did this answer your question?