2012-08-16 11 views
21

Próbuję dowiedzieć się, która forma połączenia powinien być używany podczas korzystania z pika, mam dwie alternatywy, o ile rozumiem.Która forma połączenia z pika

Albo BlockingConnection lub SelectConnection, jednak nie jestem pewien, o różnicach między tymi dwoma (czyli to, co jest BlockingConnection blokowanie? I więcej)

Dokumentacja pika mówi, że SelectConnection jest preferowanym sposobem połączyć się z królikiem, ponieważ zapewnia "wiele metod powiadamiania o zdarzeniach, w tym wybierz, epoll, kqueue i sondy".

Zastanawiam się, jakie są konsekwencje tych dwóch różnych rodzajów połączeń?

PS: Wiem, że nie powinienem umieszczać znacznika w tytule, ale w tym przypadku myślę, że pomaga to wyjaśnić pytanie.

Odpowiedz

11

Połączenie SelectConnection jest przydatne, jeśli architektura aplikacji może korzystać z asynchronicznego projektowania, np. robienie czegoś innego, gdy kończy się IO RabbitMQ (na przykład przełącz się na inne IO itd.). Ten typ połączenia używa callbacków do sygnalizowania powrotu funkcji. Na przykład można zadeklarować zwrotnych dla

on_connected, on_channel_open, on_exchange_declared, on_queue_declared itp

... do wykonywania operacji, gdy uruchamiane są te wydarzenia.

Korzyści są szczególnie dobre, jeśli serwer RabbitMQ (lub połączenie z tym serwerem) jest wolny lub przeciążony.

Blokowanie Połączenie na ręce jest po prostu tym, że blokuje się, dopóki nie zwróci funkcji zwanej. więc zablokuje wątek wykonawczy, dopóki nie zostanie na przykład połączony lub channel_open lub exchange_declared lub queue_declared return. To powiedziawszy, jego często prostsze programowanie tego rodzaju serializowanej logiki niż asynchroniczna logika SelectConnection. W przypadku prostych aplikacji z responsywnymi serwerami RabbitMQ te również działają poprawnie IMO.

Przypuszczam, że przeczytałeś już dokumentację Pika http://pika.github.com/connecting.html, jeśli nie, to jest to absolutnie niezbędna informacja przed użyciem Pika!

Pozdrawiam!