2009-07-16 11 views
8

W przypadku oprogramowania pośredniego zorientowanego na komunikaty, które nie obsługuje spójnie wiadomości priorytetowych (takich jak AMQP), jaki jest najlepszy sposób na wdrożenie priorytetu zużycia, gdy kolejki mają tylko semantykę FIFO ? Ogólnym przypadkiem użycia byłby system, w którym konsumenci otrzymują wiadomości o wyższym priorytecie przed wiadomościami o niższym priorytecie, gdy duży zaległości wiadomości istnieją w kolejce (ach).W systemie FIFO Qeueing, jaki jest najlepszy sposób implementacji wiadomości priorytetowych?

+2

Czy możesz mieć wiele kolejek? Jeśli tak, sugerowałbym posiadanie oddzielnej kolejki dla wiadomości o wysokim priorytecie, która jest odpytywana najpierw przed standardową kolejką, która jest używana tylko wtedy, gdy kolejka priorytetów jest pusta. Nie wiem, czy to pasuje do twojego scenariusza, ale to był mój pierwszy pomysł. – CodeFusionMobile

+0

Zgadzam się z CSharpWithJava. W tej chwili robię dużą aplikację do obsługi wiadomości i myślę, że z twoich pytań potrzebujesz wielu kolejek, abyś mógł odciążyć niższe wiadomości pri na niższą kolejkę pri i natychmiast przeczytać wysoką wartość. –

Odpowiedz

10

Biorąc pod uwagę tylko obsługę FIFO dla danej pojedynczej kolejki, będziesz oczywiście musiał wprowadzić wiele kolejek, pośrednika lub mieć bardziej złożonego konsumenta.

Kilka kolejek może być obsługiwanych na kilka sposobów. Producent i konsument mogli zgodzić się na dwie kolejki między nimi, jedną dla zadań o wysokim priorytecie i jedną dla zadań drugoplanowych.

Jeśli producent jest ograniczony do pojedynczej kolejki, ale masz kontrolę nad konsumentem, rozważ wprowadzenie na ścieżce routera typu "fan-out". Więc producent-> Router jest pojedynczą kolejką, a router ma następnie dwie kolejki do konsumenta.

Innym sposobem na rozwiązanie tego problemu, który prawdopodobnie nie jest idealny, jest nakłonienie klienta do przewinięcia wątku do przodu w kolejce, a następnie wysłanie pracy wewnętrznie. Coś jak powyższa wersja routera, ale w jednej aplikacji. Ma to wadę polegającą na tym, że w aplikacji znajduje się wiele wiadomości podczas lotu, co może komplikować odzyskiwanie w przypadku awarii.

Nie zapomnij rozważyć, jak głodować skutecznie zdarzenia o niskim priorytecie, niezależnie od tego, czym one są, jeśli niektóre z nich powinny być przetwarzane, nawet jeśli nadal mają miejsce zdarzenia o wyższym priorytecie.

+1

To jest mniej więcej dokładnie to, kogo wdrożyliśmy tę strategię dla projektu w pracy. Wiele kolejek dla systemu o stopniowanym priorytecie. Nie martwimy się zbytnio o głód, ponieważ możemy ponownie opublikować ważne wiadomości o niższym priorytecie z wyższym priorytetem w takich przypadkach; praca nadmiarowa jest w przeważającej mierze obsługiwana, aby to umożliwić. – quaternion

Powiązane problemy