RabbitMQ: ¿Ignorar prefetch () provoca concurrencia de datos?
El escenario:
Tengo un solo productor y consumidor con una sola cola que transfiere mensajes. El consumidor actualizará un valor en la base de datos de acuerdo con el mensaje que lo ha consumido. No se deben enviar operaciones a la base de datos en paralelo. Por lo tanto, no deberíamos hacer nada que provoque la concurrencia de datos en la base de datos. Suelo prefetch(1)recibir un mensaje a la vez. ¿Eliminar la prefetch()causa que se envíen múltiples operaciones a la base de datos en paralelo o no?
¿El consumidor procesa los mensajes en un procesador de un solo subproceso sin prefetch()o no?
Respuestas
Conduce prefetcha paralelo
Si no consideramos el caso de las operaciones por lotes de un solo subproceso, primero necesitamos saber qué conduce al paralelo. Consumo de varios hilos.
El valor de captación previa define el número máximo de entregas no reconocidas que se permiten en un canal o consumidor.
Por lo tanto, la captación previa solo afecta a la cantidad de mensajes no confirmados que se almacenan en la memoria del consumidor. Esto no implica consumir.
¿Qué configuración conducirá a paralelo
Si tenemos un solo canal, tiene un solo hilo de envío y, por lo tanto, todos los mensajes entrantes se procesan en serie. Una forma obvia de lograr el paralelismo de consumo es aumentar el número de canales de escucha y consumidores.
Aunque rabbitmq tiene muchas versiones de clientes, todas están escritas de acuerdo con el protocolo AMPQ, por lo que no hay mucha diferencia.