2014-04-01 42 views
8

Mam aplikację internetową, która korzysta z wtyczki autocomplete jquery, która zasadniczo wysyła przez ajax żądanie zawierające tekst, który został wpisany w polu tekstowym do naszego serwera WWW, raz serwer sieciowy otrzymuje to żądanie, a następnie jest przekazywany do rabbitmq.Czy należy używać kolejek komunikatów do synchronicznych wywołań rpc przez ajax

Wiem, że możemy czerpać korzyści z używania wiadomości, ale wydaje się, że używanie go do blokowania wywołań rpc jest nadużyciem i że coś takiego jak WCF jest o wiele bardziej odpowiednie w tym przypadku, czy jest to przypadek, czy jest to akceptowalne architektura?

+0

Oczywiście to zależy od aplikacji, można użyć kolejkę dla wywołań RPC, ale myślę, że to nie jest jego naturalna używa. Aby ci pomóc, mam dwa pytania: 1. Dlaczego korzystasz z połączeń synchronicznych? 2. Czy masz jakiś problem z bieżącą aplikacją? W każdym razie, nie wiem, w jakim języku rozwijasz aplikację, ale myślę, że możesz użyć async-połączeń z RabbitMQ i użyć niektórych technologii, takich jak Spring DeferredResult, aby uzyskać wyniki z twojej kolejki. Nie lubię połączeń synchronicznych, ponieważ blokujesz wątek (na przykład podczas wyszukiwania w bazie danych) bezużytecznie. – Gabriele

+0

1. mamy wywołania synchroniczne do wtyczki autouzupełniania, musisz mieć odpowiedź na żądanie 2. nie ma problemu innego niż myślę, że to niewłaściwe użycie wiadomości w tym przypadku i chcę to zmienić, i szukam dla dowodów na poparcie tej zmiany. – nickbw

Odpowiedz

3

Możliwe jest wykonywanie synchronicznych żądań RPC za pomocą RabbitMQ. Here Wyjaśniono to bardzo dobrze, z jego wadą! Jest to więc akceptowalna architektura. Zniechęcony, ale akceptowalny, gdy reakcja synchroniczna jest obowiązkowa.

Jako potencjalny efekt przeciwny polega na tym, że dodanie RabbitMQ w środku, spowoduje dodanie opóźnienia do rozwiązania.

Jednak masz możliwość zdobycia pod względem niezawodności, elastyczności, skalowalności, ...

+0

Tak, to jest opóźnienie, które jest dla mnie złamaniem umowy, nie można tak naprawdę mieć autouzupełniania, które jest wolne – nickbw

+0

o dobrze ... opóźnienie jest tutaj mierzone w kategoriach milis. Szybszy jest lepszy, ale nie jest to jedyny parametr, który należy uwzględnić. Jedyne, co pozwala mi myśleć, to że autouzupełnianie powinno być zaimplementowane jako asynchroniczne.Co ciekawe, natknąłem się na [to tak post] (http://stackoverflow.com/questions/4439953) - może to może być użyteczne: nigdy nie używałem autouzupełniania, pozostawiam to Tobie. – Sigismondo

0

Jakie korzyści z tego można uzyskać? I w uczciwości, jeśli umieścisz wiadomość w kolejce, jak jest synchroniczna? chyba że ten sam proces, który umieścił wiadomość w kolejce, jest tym, który ją usuwa, ale to prawie bezużyteczne nie?

Teraz, jeśli wszystko, co chcesz zrobić, to umieścić wiadomość w kolejce i przetworzyć ją później, jest wielka. Również fakt, że miałeś WCF do mieszaniny jest IMHO symptomem, że coś może nie jest wystarczająco jasne. Możesz użyć WCF jako bramy API i użyć jej do napisania komunikatu do kolejki, więc nie chodzi o WCF lub Queues, ale raczej o synchronizację kontra asynchronizację.

Sposób w jaki wkładasz swoje pomysły, nie wygląda mi na dobrze.

+0

Czasami musisz mieć odpowiedź na wiadomość, bo autouzupełnianie, jeśli nie otrzymasz odpowiedzi, byłoby bezużyteczne. Wolałbym usunąć synchroniczne wywołania z wiadomości i szukam dowodów na poparcie/zaprzeczanie temu – nickbw

+1

W wywołaniach asycn otrzymujesz odpowiedź, ale nie w sposób, w jaki myślisz. Na przykład, jeśli używasz CQRS z usługą REST, po przesłaniu instrukcji, takiej jak: AddUserCommand, otrzymujesz tylko kody HTTP, takie jak 200, 401, 406 .. nic więcej, nawet jeśli wiadomość jest przetwarzana zsynchronizowana. Aby uzyskać status komendy, musisz użyć innej warstwy interfejsu API. Te same warstwy (modele odczytu) są tym samym, które udowadniają dane dla twoich drop-downów. Jedno jest pewne, jeśli chcesz przetworzyć synchronizację, usuń koleje z architektury. – Marco