2012-05-20 25 views
14

Po pierwsze, jestem nowy w ZeroMQ i systemach kolejkowania wiadomości, więc to, co próbuję zrobić, może zostać rozwiązane przez inne podejście. Jestem projektowania systemu komunikacyjnego, który wykonuje następujące czynności:Jak mogę monitorować/zarządzać kolejką w ZeroMQ?

  • Wiele klienci łączą się z brokerem i wysyłać identyfikator elementu, które muszą być przetwarzane. Klient rozłącza się natychmiast i nie czeka na odpowiedź.

  • Broker wysyła elementy do pracowników, po jednym elemencie na pracownika, aby wykonać pewne przetwarzanie. Każdy powrót zwraca sygnał, że przetwarzanie zostało zakończone.

mam prymitywny konfiguracji systemu, który przetwarza żądania/odpowiedzi poprawnie, ale chciałbym również, aby móc wykonać następujące czynności:

  • Zapytanie broker, aby zobaczyć, jak wiele procesów faktycznie pracują nad robotnikami, a ilu tylko czeka, aby je uruchomić.

  • Poproś brokera, aby działał tylko jeden proces na identyfikator - jeśli pojawi się zduplikowany identyfikator, a element nie jest przetwarzany przez pracownika, nie dodawaj go do kolejki.

Używam konfiguracji ankiety z gniazdami brokera/dealera. Kod, którego używam, jest bardzo podobny do kodu this example from Ian Barber.

Moja pierwsza skłonność (choć nie jestem pewna, jak ją wdrożyć w zmq), polega na tym, aby pośrednik śledził identyfikatory, które zostały odebrane, oraz te, które są aktywnie przetwarzane przez pracowników. Wygląda na to, że pośrednik natychmiast przesyła żądania do pracowników, bez względu na to, czy są one dostępne, czy rzeczywiście umożliwiają przetwarzanie. Pracownicy następnie umieszczają kolejki w identyfikatorach i przetwarzają je w kolejności. To nie jest idealne, ponieważ staram się monitorować i kontrolować, co dzieje się w systemie centralnie, aby osiągnąć niezawodność.

W każdym razie wszelkie sugestie, wskazówki lub przykłady tego typu konfiguracji byłyby bardzo mile widziane.

+0

tylko myśl, zmq jest dość Barebone/lekki, może należy spojrzeć na produkty, jak ActiveMQ, RabbitMQ lub openmq, mają szerokie możliwości zarządzania. produkty takie jak activemq i openmq są dość skoncentrowane na javie, ale mają bardzo funkcjonalne wiązania dla wielu języków programowania. – fvu

+0

@fvu - dziękuję - Miałem nadzieję, że uda mi się uzyskać zmq, ale sprawdzę niektóre inne biblioteki - w szczególności myślę, że RabbitMQ może działać. – jonstjohn

Odpowiedz

14

ZeroMQ jest, moim zdaniem, najlepiej używany w projektach bez brokerów, dla których zaprojektowano bibliotekę. Jeśli chcesz monitorować liczbę elementów w kolejce lub przepustowość, lub cokolwiek innego, będziesz musiał sam to skompilować do aplikacji/urządzenia/producenta. Odkąd jesteś nowicjuszem, możesz szybko wymknąć się spod kontroli. Biorąc to pod uwagę, sugerowałbym zajrzenie do RabbitMQ (lub podobnego brokera), który zapewniłby Tobie te usługi po wyjęciu z pudełka. Jeśli zaadoptujesz RabbitMQ (lub raczej AMQP), proponuję użyć wymiany Fanout dla scenariusza opisanego powyżej.

+0

+1 masz prawo o zeromq, ale chciałbym użyć zeromq z rabbitmq używając królika jako serwera kolejki i brokera wiadomości zeromq. – BlaShadow