[Conceito] – Filas/Tópicos: Processar Mensagens Fora de Ordem

Conteúdo original em https://twitter.com/zanfranceschi/status/1574848219833462784

Ei dev,

Quando estiver trabalhando com filas e bater aquela dor de barriga porque as mensagens não estão chegando em ordem e isso for um problemão, eu tenho uma al…


This content originally appeared on DEV Community 👩‍💻👨‍💻 and was authored by Francisco Zanfranceschi

Conteúdo original em https://twitter.com/zanfranceschi/status/1574848219833462784

Ei dev,

Quando estiver trabalhando com filas e bater aquela dor de barriga porque as mensagens não estão chegando em ordem e isso for um problemão, eu tenho uma alternativa relativamente simples pra você!

Cola mais pros detalhes!

cc @sseraphini

Image

Primeiro, vamos pensar num cenário onde a ordem da chegada das mensagens importa.

Extrapolei o diagrama de sequência, mostrando dois fluxos em um – publicação/consumo das mensagens –, para simplificar a linha do tempo dos acontecimentos.

Aqui, apenas o caminho feliz é mostrado.

Image

Só que problemas acontecem e pode rolar da mensagem do pedido chegar antes da mensagem do seu usuário correspondente! E agora?! 😱

Image

Uma série de coisas pode ter ocorrido:

  • Mensagens de usuários cadastrados podem ser lentas pra processar.

  • A publicação do usuário cadastrado pode ter tido um problema.

  • Num cenário de consumo paralelo das mensagens, a ordem calhou de estar incorreta.

  • Etc.

C'est la vie.

Agora que você entendeu o problema do consumo fora de ordem das mensagens, antes de ler o próximo tweet, pára e pensa como resolveria isso.

Sua ideia ficou muito mirabolante ou ficou simples? Já passou por esse problema? 👀

Como disse anteriormente, a alternativa aqui sugerida é simples. E o primeiro passo é devolver a mensagem para um canal (fila/tópico) de retry.

Cada middleware possui especificidades, mas a ideia central é a mesma para todos.

Image

Essa mensagem deve ficar nesse canal (tópico ou fila) por um tempo configurável – segundos, minutos, horas, etc.

Após esse TTL (time to live – expiração) ocorrer, o consumidor, de alguma forma, deve processar novamente essa mensagem.

Esse passo pode se repetir algumas vezes.

Image

Essa retentativa pode ser via canal original ou canal de retry – depende do middleware e de detalhes de implementação.

Não é uma solução computacionalmente eficiente, mas é de fácil implementação pois reusa a infraestrutura existente de filas e mantém os consumidores stateless.

Image

Novamente, a ideia central é devolver para o middleware de mensagens/streaming as mensagens que não foram possíveis de serem processadas para que estas voltem posteriormente ao consumidor que a devolveu. Eventualmente, a ordem das mensagens ficará correta e tudo se encaixará.

Alguns pontos importantes:

  • Cuidado com a quantidade de retries – sempre coloque um limite.

  • Calibre com carinho o intervalo das retentativas – cuidado para não transformar os retries num auto-ataque!

  • Não use para casos em que pouco lag for essencial.

E o mais importante, procure entender como paralelismo, multithreading, altos volumes, etc. impactam em soluções de processamentos assíncronos usando filas/tópicos. Experimente, estude, faça POCs.

E não canso de recomendar Enterprise Integration Patterns para esse assunto.

Image

Obrigado demais pra você que chegou até aqui! ♥️

Se curtiu o conteúdo, dá um RT no primeiro tweet, like, comenta, compartilha, mostra pros seus filhos, vizinhos, e no grupo do zap. 🤭


This content originally appeared on DEV Community 👩‍💻👨‍💻 and was authored by Francisco Zanfranceschi


Print Share Comment Cite Upload Translate Updates
APA

Francisco Zanfranceschi | Sciencx (2022-09-27T19:53:24+00:00) [Conceito] – Filas/Tópicos: Processar Mensagens Fora de Ordem. Retrieved from https://www.scien.cx/2022/09/27/conceito-filas-topicos-processar-mensagens-fora-de-ordem/

MLA
" » [Conceito] – Filas/Tópicos: Processar Mensagens Fora de Ordem." Francisco Zanfranceschi | Sciencx - Tuesday September 27, 2022, https://www.scien.cx/2022/09/27/conceito-filas-topicos-processar-mensagens-fora-de-ordem/
HARVARD
Francisco Zanfranceschi | Sciencx Tuesday September 27, 2022 » [Conceito] – Filas/Tópicos: Processar Mensagens Fora de Ordem., viewed ,<https://www.scien.cx/2022/09/27/conceito-filas-topicos-processar-mensagens-fora-de-ordem/>
VANCOUVER
Francisco Zanfranceschi | Sciencx - » [Conceito] – Filas/Tópicos: Processar Mensagens Fora de Ordem. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2022/09/27/conceito-filas-topicos-processar-mensagens-fora-de-ordem/
CHICAGO
" » [Conceito] – Filas/Tópicos: Processar Mensagens Fora de Ordem." Francisco Zanfranceschi | Sciencx - Accessed . https://www.scien.cx/2022/09/27/conceito-filas-topicos-processar-mensagens-fora-de-ordem/
IEEE
" » [Conceito] – Filas/Tópicos: Processar Mensagens Fora de Ordem." Francisco Zanfranceschi | Sciencx [Online]. Available: https://www.scien.cx/2022/09/27/conceito-filas-topicos-processar-mensagens-fora-de-ordem/. [Accessed: ]
rf:citation
» [Conceito] – Filas/Tópicos: Processar Mensagens Fora de Ordem | Francisco Zanfranceschi | Sciencx | https://www.scien.cx/2022/09/27/conceito-filas-topicos-processar-mensagens-fora-de-ordem/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.