2017-05-18 44 views
5

Mam do czynienia z problemem, który łączy sieć ActiveMQ.Problem podczas przesyłania wiadomości przez sieć activeMQ

Mam dwa scenariusze:

S1: Moja aplikacja jest podłączony do pierwszego ActiveMQ "A". A to activeMQ "A" jest połączone z ActiveMQ "B" - Jest to scenariusz, który powoduje pewne problemy. S2: Moja aplikacja jest bezpośrednio połączona z ActiveMQ "B".

W obu przypadkach wysyłamy dane do tej samej kolejki i oczywiście wysyłamy dokładnie te same dane. Co jest oczekiwane: gdy ActiveMQ "B" odbierze dane, powinien odpowiedzieć na tę samą kolejkę.

W scenariuszu S1 dane są wysyłane przez moją aplikację do ActiveMQ "A", a następnie przekazywane do ActiveMQ "B", ale ta ActiveMQ "B" nie wydaje się odpowiadać, faktem jest ActiveMQ "A" nie nie otrzymuje danych z ActiveMQ "B". To jest mój główny problem i nie mogę zrozumieć, dlaczego to nie działa, ponieważ jeśli podłączę moją aplikację bezpośrednio do ActiveMQ "B", otrzymam dane.

Spróbowałem stworzyć prosty schemat wyjaśniający S1 i S2.

Czy ktoś już napotkał tego rodzaju problem? Gdzie powinienem zaglądnąć, aby znaleźć przyczynę problemu?

enter image description here

EDIT: Niektóre więcej szczegółów:

W ActiveMQ "A" Widzę istnieją konsumenci (kolumna "Ilość konsumenta" jest równa 5) Jednakże w ActiveMQ "B" nie nie są konsumentami (kolumna "Liczba konsumentów" wynosi 0), podczas gdy powinna wynosić 5 jak w aktywnym MQ "A". Jakieś pomysły ?

+0

Czy możesz opracować w swoim scenariuszu S1, co dokładnie ma robić ActiveMQ B? Czy inny konsument odpytuje serwer B i wysyła odpowiedź? – Adonis

+0

Osobiście spotkałem się z podobną sytuacją, ale twoja sprawa może być inna. Jeśli używasz osobnej kolejki dla każdego konsumenta, zerwana komunikacja może być spowodowana kolejką blokującą, która ma wiele oczekujących wiadomości dla określonego klienta. Sprawdź kolejkę i spróbuj oczyścić. – YuVi

Odpowiedz

0

ActiveMQ "A" i ActiveMQ "B" używają wtyczki prostego uwierzytelniania w obie strony. Mój problem polegał na tym, że odpowiadając, ActiveMQ "B" próbował połączyć się z Active MQ "A", ale nie udało się uwierzytelnić ... to takie proste! Faktem jest, że nie miałem kontrole nad ActiveMQ "B". Rozwiązaniem było więc skonfigurowanie ActiveMQ "A" w celu akceptacji użytkownika/pwd z ActiveMQ "B".

1

może związane z networkTTL config. (http://activemq.apache.org/networks-of-brokers.html)

W domyślnej konfiguracji, komunikat może przejść tylko jeden krok w sieci. Jeśli przejdzie od A do B, nie może wrócić do A.

+0

Dodałem networkTTL = "3" do mojego złącza, ale problem pozostaje ten sam. Chcę dodać coś o moim problemie: w activeMQ "A" widzę, że jest konsument (kolumna "Liczba konsumentów" jest równa 5), ​​jednak w activeMQ "B" nie ma konsumenta (kolumna "Liczba konsumentów "wynosi 0), podczas gdy powinno być 5, jak w aktywnym MQ" A ". Jakieś pomysły ? – Ashbay