Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 23648|Resposta: 0

Limite de processamento paralelo para consumidores no RabbitMQ BasicQos

[Copiar link]
Publicado em 10/04/2018 22:36:02 | | | |


Primeiramente, temos 100 mensagens não processadas no nosso servidor rabbitmq, abrimos um cliente consumidor aleatoriamente, e a seguinte situação vai aparecer,

100 pedaços de dados, todos passados de uma vez só, mas não conseguimos processar tantos dados ao mesmo tempo com um único cliente, o que devemos fazer?




Como mostrado na imagem acima, não confirmamos o recebimento da mensagem! Se o produtor continuar enviando, nós, consumidores, continuaremos recebendo!

Imagine só, se um consumidor individual pudesse processar até 60 mensagens em 1 minuto, porém, um produtor pode enviar 300 mensagens em 1 minuto, se,Temos um cliente consumidor que precisa receber 300 mensagens ao mesmo tempo em 1 minuto, o que ultrapassou nossa carga máxima, o que pode levar ao esgotamento dos recursos do servidor e ao cliente consumidor travado
O RabbitMQ oferece um recurso de qualidade de serviço (qoS), isto é, sob a premissa de confirmação não automática das mensagens, se um certo número de mensagens (definindo o valor de QoS com base em consume ou channel) não for confirmado, novas mensagens não serão consumidas.



prefetchSize:0
prefetchCount: Diz ao RabbitMQ para não enviar mais de N mensagens para um consumidor ao mesmo tempo, ou seja, quando houver N mensagens que ainda não foram ackadas, o consumidor bloqueará até que haja um ack de mensagem
global:true\false Seja que as configurações acima sejam aplicadas aos canais, para simplificar, se as restrições acima são no nível do canal ou no nível do consumidor
Nota: Dizem que prefetchSize e global não são implementados pelo rabbitmq, então não vou estudá-los por enquanto


prefetch_count entra em vigor quando no_ask=falsoOu seja, no caso da resposta automática, esses dois valores sãoNão em efeitode

Defina prefetchCount = 3 via método BasicQos. Isso permite que o RabbitMQ processe até 3 mensagens por consumidor ao mesmo tempo. Em outras palavras, ele não distribuirá novas Mensagens ao consumidor até receber o ack. Veja como configurar:





Como você pode ver na figura, há dois consumidores ouvindo o Queue ao mesmo tempo, mas note que a mensagem aqui só será automaticamente acecada se for consumida por um consumidor, e o outro consumidor não receberá essa mensagem novamente.

Introdução ao site oficial: http://www.rabbitmq.com/consumer-prefetch.html

Note que esse método pode fazer com que a fila fique cheia. Claro, talvez você precise adicionar mais Consumidores ou criar mais VirtualHosts para refinar seu design.





Anterior:O EF implementa inserções, atualizações e excluções em massa de bancos de dados
Próximo:O servidor web IIS Express não pôde ser iniciado
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com