RabbitMQ: Ignorar prefetch () causa simultaneidade de dados?

Oct 24 2020

O cenário:

Tenho um único produtor e consumidor com apenas uma fila que transfere mensagens. O consumidor atualizará um valor no DB de acordo com a mensagem que o consumiu. Nenhuma operação deve ser enviada ao banco de dados em paralelo. Portanto, não devemos fazer nada que cause a simultaneidade de dados no banco de dados. Eu costumo prefetch(1)receber uma mensagem de cada vez. A remoção da prefetch()causa faz com que várias operações sejam enviadas ao banco de dados em paralelo ou não?

O consumidor processa mensagens em um processador de thread único, sem prefetch()ou não?

Respostas

2 spike王建 Oct 26 2020 at 10:54

Leva prefetchao paralelo

Se não considerarmos o caso de operações em lote de thread único, primeiro precisamos saber o que leva ao paralelo. Vários threads consumindo.

O valor de pré-busca define o número máximo de entregas não confirmadas que são permitidas em um canal ou consumidor.

Portanto, a pré-busca afeta apenas a quantidade de mensagens não confirmadas armazenadas na memória do consumidor. Isso não envolve consumir.

Qual configuração levará ao paralelo

Se tivermos um único canal, ele terá um único encadeamento de despacho e, portanto, todas as mensagens recebidas serão processadas em série. Uma maneira óbvia de atingir o paralelismo de consumo é aumentar o número de canais de escuta e consumidores.

Embora rabbitmq tenha muitas versões de clientes, todas são escritas de acordo com o protocolo AMPQ, portanto, não há muita diferença.