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?
Odpowiedz
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.
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
- 1. Jaki jest najlepszy sposób implementacji protokołów?
- 2. Najlepszy sposób implementacji wtyczki
- 3. Jaki jest najlepszy sposób na obsługę wiadomości FBO w OpenGL?
- 4. Jaki jest najlepszy sposób tworzenia struktur wiadomości w Javie?
- 5. Jaki jest najlepszy sposób na porównywanie programów w systemie Windows?
- 6. Jaki jest najlepszy sposób obsługi wielu działań?
- 7. Jaki jest najlepszy wzorzec C# do implementacji hierarchii z wyliczeniem?
- 8. W Perl, w jaki sposób bezpiecznie utworzyć tymczasowy FIFO?
- 9. Jaki jest najlepszy sposób przetestowania aplikacji szyny?
- 10. Jaki jest najlepszy sposób rejestrowania aktywności użytkowników?
- 11. Jaki jest najlepszy sposób na seed srand()?
- 12. Jaki jest najlepszy sposób profilowania wykonywania javascript?
- 13. Jaki jest najlepszy sposób tworzenia wdrożeń ClickOnce
- 14. Jaki jest najlepszy sposób zamknięcia gałęzi Mercurial?
- 15. Jaki jest najlepszy sposób odczytu GetResponseStream()?
- 16. Jaki jest najlepszy sposób uczenia się WCF?
- 17. Jaki jest najlepszy sposób wykonywania jQuery .change()
- 18. Jaki jest najlepszy sposób na wdrożenie "timera"?
- 19. Jaki jest najlepszy sposób na naukę CUDA?
- 20. Jaki jest najlepszy sposób tworzenia wyszukiwania whois?
- 21. Jaki jest najlepszy sposób udokumentowania kodu Perla?
- 22. Jaki jest najlepszy sposób tworzenia wewnętrznych produktów?
- 23. Jaki jest najlepszy sposób przełączania zmiennej binarnej?
- 24. Jaki jest najlepszy sposób testowania usług WCF?
- 25. Jaki jest najlepszy sposób generowania mapy witryny?
- 26. Jaki jest najlepszy sposób symulacji java.lang.Thread?
- 27. Jaki jest najlepszy sposób na porównywanie datownika w Bash?
- 28. Jaki jest najlepszy sposób zaplanowania zadania w aplikacji rozruchu wiosennego?
- 29. Jaki jest najlepszy sposób zwiększania wyliczenia?
- 30. Jaki jest najlepszy sposób na skopiowanie listy?
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
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ść. –