2012-06-21 15 views
6

Jestem nowy w RabbitMQ i zastanawiałem się nad dobrym podejściem do tego problemu. Zastanawiam się. Chcę utworzyć usługę, która subskrybuje kolejkę i pobiera tylko wiadomości spełniające określone kryteria; na przykład, jeśli w wiadomości znajduje się konkretny nagłówek tematu.RabbitMQ - wybiórcze pobieranie wiadomości z kolejki

Nadal uczę się o RabbitMQ i szukałem wskazówek, jak się do tego podejść. Moje pytania obejmują: w jaki sposób konsument może pobierać tylko określone wiadomości z kolejki? W jaki sposób producent może ustawić nagłówek tematu w wiadomości (jeśli jest to nawet właściwy termin?)

+0

Jeśli naprawdę Twój konsument musi subskrybować ** ** (nie interesuje wiadomości publikowane _before_ abonamentu), abonament (i wiążące się z reguły wyboru) nie jest do istniejącego _queue_, ale do istniejącego _exchange_ (jak podano poniżej). Następnie należy zmienić treść pytania. – Myobis

Odpowiedz

14

RabbitMQ jest idealny do tej sytuacji. Masz wiele możliwości zrobienia tego, co chcesz. Sugeruję przeczytanie dokumentacji, aby uzyskać lepsze zrozumienie. Proponuję użyć tematu lub bezpośredniej wymiany. Temat jest bardziej elastyczny. Tak to wygląda.

Kod producenta łączy się z brokerem RabbitMQ i tworzy i wymienia na konkretną nazwę.

Producent publikuje do wymiany. Każda opublikowana wiadomość zostanie opublikowana wraz z kluczem routingu.

Konsument łączy się z brokerem RabbitMQ. tworzy

Consumer Kolejka

konsumentów wiąże się kolejka do wymiany, tym samym wymiany określonym w producenta. Wiązanie obejmuje również klucze routingu dla każdego komunikatu wymaganego dla tego konkretnego konsumenta.

Powiedzmy, że publikujesz komunikaty dziennika. Klucz routingu może wyglądać jak "log.info", "log.warn", "log.error". Każda wiadomość opublikowana przez producenta będzie zawierała odpowiedni klucz routingu. Będziesz wtedy mieć konsumenta, który wysyła i wysyła e-mailem wszystkie komunikaty o błędach i inny, który zapisuje wszystkie komunikaty o błędach do pliku. Tak więc program pocztowy określi powiązanie z kolejki do wymiany za pomocą klawisza routingu "log.error". W ten sposób, chociaż wymiana odbierze wszystkie wiadomości, kolejka zdefiniowana dla wiadomości e-mail będzie zawierała tylko komunikaty o błędach. Filelogger zdefiniuje nową oddzielną kolejkę powiązaną z tą samą giełdą i skonfiguruje inny klucz routingu. Możesz wykonać trzy oddzielne powiązania dla trzech różnych kluczy routingu, lub po prostu użyć wieloznacznego "log. *", Aby zażądać wszystkich wiadomości z giełdy, zaczynając od dziennika.

Jest to prosty przykład pokazujący, w jaki sposób można osiągnąć to, co chce się zrobić.

wygląd here przykłady kodu specjalnie Numer tutorialu 5.

+0

Czy masz na myśli, że konsument może pobrać wiadomość z określonym kluczem routingu w jednej kolejce? Wygląda na to, że konsument nie ma wyboru, po prostu odbiera wszystkie wiadomości z kolejki. – ThemeZ

+2

@ Themez konsumenci otrzymują wszystkie wiadomości z kolejki. Myślę, że to z definicji. Chodzi o to, że są one filtrowane na poziomie wymiany. Przy wymianie tematów kolejka otrzyma tylko określone wiadomości. W ten sposób konsument będzie czytał wiadomości, które chcą, ponieważ kolejka otrzymuje tylko wiadomości, których chce konsument. – robthewolf

Powiązane problemy