Fala meu amigo tudo bem?

Hoje trabalho num sistema de mensageria que usa amplamente o RabbitMQ e dado o seu cenário eu posso te dar aqui algumas orientações supondo que a sua aplicação funciona em multitenancy (umuma única aplicação para varios usuarios, enfim, um saas rs)

  1. fila única para os contatos
  2. multiplos consumers para melhorar o tps da sua aplicação
  3. um contato por mensagem
  4. configure uma fila DLQ (dead letter queue) que em caso de falha essa mensagem é direcionada para la
  5. utilize filas do tipo quorum, elas funcionam no formato FIFO (first in first out)
  6. use e abuse dos params da mensagem como correlation_id, message_id, etc
  7. se você precisar de algo realtime utilize websocket (socket.io por exemplo) para mandar as mensagens ao usuário e deixe o rabbitmq para processar os dados no backend (add no banco de dados, parsers, etc)
  8. se optar por filas individuais opte por filas que se auto deletam pq o rabbitmq fica extremamente lento quando há muitas filas

por fim tenha em mente que o rabbitmq é um message broker e a função dele é simplesmente entregar a mensagem que você posta nele a um consumidor que irá trabalhar os dados da mensagem de forma assincrona.

Muito obrigado pelas suas instruções, são de grande ajuda sem dúvidas. Então está me falando que seria apenas uma fila (por exemplo a de contatos) para todas empresas, isso?

Atualmente estou utilizando socket.io mesmo. Antes de enviar pra fila eu mando o contato via socket pro client e após isso é enviado pra fila.

exatamente! assim você controla o fluxo de atualização no banco de dados a partir da quantidade de consumers e fica muito mais fácil a manutenção
Agradeço a resposta. Sobre a questão do envio de mensagem, mantenho apenas uma fila pra todas empresas também? E outra, nesse caso das mensagens, é normal utilizar fila tanto pra receber quanto pra enviar?