Wątek przeniesiony 2018-10-26 16:56 z Nietuzinkowe tematy przez somekind.

Correlation ID w mikroserwisach przy komunikacji z message brokerem/rpc

0

Czesc, mam taka zagwozdkę, a mianowicie jakie rozwiązanie byłoby najlepsze przy problemie opisanym w temacie. Chodzi o to, że chciałbym mieć jasną korelację miedzy zapisami w bazie między róznymi serwisami. Problem polega na tym, że nie wiem, jakie rozwiązanie byłoby najlepsze, uwzgłedniając to, że serwisy komunikują sie za pomocą TCP i message brokerów. Mógłbym podawać correlation id w parametrach, ale myslalem o jakims bardziej uniwersalnym rozwiązaniu, tylko nie wiem do konca jakim. Gdyby to byla komunikacja HTTP, to moglbym przekazywac w headearsach, a w tym wypadku do głowy przychodzi mi tylko parametryacja.

0

A co jest nie tak z correlation id? Lepsze jest wrogiem dobrego.

0

Chyba trochę nie zrozumiałem. Correlation id jest super, ale zastanawiam sie nad rozwiazaniem jak go dystrybuować między serwisami opartymi na message brokerach.

0

Nie wiem z jakich konkretnie technologii/języków korzystasz w tych mikroserwisach, ale nie kombinowałbym i zwyczajnie dodał correlation id jako wymagany parametr.

0

Rozwiazanie wydaje sie najprostsze, pytanie czy opytmalne. Korzystam z NodeJS i RabbitMQ. W przyszlosci bedzie jeszcze Python albo Golang.

0

Jesli nie korzystasz z zadnego service busa jak np. MassTransit czy NServiceBus to domyslam sie ze sam piszesz infrastrukture odpowiedzialna za wysylanie/odbieranie wiadomosci, subskrypcje itp. Mozesz np. miec interfejs dla wiadomosci ktory dostarczy kontrakt dla correlation ID- wymogiem bedzie aby kazda wiadomosc/event implementowaly ten interfejs (mozesz uzyc zamiast tego klase bazowa oczywiscie). W kodzie odpowiedzialnym za tworzenie wiadomosci bedziesz generowal CorrelationId (Guid) lub przekazywal z poprzedniej wiadomosci (aby powiazac je razem).

Ewentualnie mozesz tworzyc np. correlation context ktory bedzie "zyl" tak dlugo jak aktualna sesja.

0

Wiadomość w protokole AMPQ posiada taką właściwość jak correlationId oraz nagłówki które możesz ustawiać. Jeśli używasz jakiegoś SDK to na pewno możesz to ustawić. Istnieją też już gotowe rozwiązania do takich problemów. Możesz np spojrzeć na open tracing https://opentracing.io/ i jaegera https://github.com/jaegertracing/jaeger

https://www.rabbitmq.com/tutorials/tutorial-six-java.html
screenshot-20181027102723.png

0

Dzieki za zaangazowanie. To znaczy wiem, ze RabbitMQ posiada taki property, tylko bardziej mi chodzilo o to jak zrobic to technicznie, jakiego "wzorca" do tego uzyc. Czy ladowac wszystko jako argument i przekazywac, czy da sie to moze zrobic bardziej generycznie. Tak zeby developer nie musial o tym pamietac, ale widze ze pozostaje tylko takie rozwiazanie.

0

Nie wiem czego używasz do komunikacji z RabbitMQ, ale jeśli chodzi o wzorzec to użyłbym tutaj jakiegoś dekoratora który opakuje Ci istniejącą szynę w correlationId.

1 użytkowników online, w tym zalogowanych: 0, gości: 1