2012-08-16 16 views
21

He estado tratando de averiguar qué tipo de conexión debo usar cuando uso pika, tengo dos alternativas por lo que entiendo.Qué forma de conexión usar con pika

O bien el BlockingConnection o la SelectConnection, sin embargo yo no estoy muy seguro acerca de las diferencias entre estos dos (es decir, lo que está bloqueando el BlockingConnection? Y más)

La documentación para pika dice que SelectConnection es la manera preferida para conectarse a conejo, ya que proporciona "múltiples métodos de notificación de eventos que incluyen select, epoll, kqueue y poll".

Así que me pregunto cuáles son las implicaciones de estos dos tipos diferentes de conexiones.

PD: Sé que no debería poner una etiqueta en el título, pero en este caso creo que ayuda a aclarar la pregunta.

Respuesta

11

SelectConnection es útil si la arquitectura de su aplicación se puede beneficiar de un diseño asincrónico, p. hacer otra cosa mientras RabbitMQ IO finaliza (por ejemplo, cambiar a otro IO, etc.). Este tipo de conexión usa devoluciones de llamada para indicar cuándo regresan las funciones. Por ejemplo, puede declarar devoluciones de llamada para

on_connected, on_channel_open, on_exchange_declared, etc. on_queue_declared

... para llevar a cabo las operaciones cuando se activan estos eventos.

La ventaja es especialmente buena si su servidor RabbitMQ (o su conexión a ese servidor) es lento o está sobrecargado.

BloqueoLa conexión en la mano es solo eso - bloquea hasta que la función llamada regrese. por lo que bloqueará el hilo de ejecución hasta que esté conectado o channel_open o exchange_declared o queue_declared return por ejemplo. Dicho esto, a menudo es más sencillo programar este tipo de lógica serializada que la lógica asincrónica de SelectConnection. Para aplicaciones simples con servidores RabbitMQ receptivos, estos también funcionan OK IMO.

Supongo que ya ha leído la documentación de Pika http://pika.github.com/connecting.html, de lo contrario, esta es información absolutamente vital antes de utilizar Pika.

¡Salud!

Cuestiones relacionadas