
Recentemente, eles encomendaram com sucesso um sistema de processamento de usuários para cidadãos. O ponto principal é que, quando você não tem água, aquecimento ou um enorme buraco na estrada perto de sua casa, pode reclamar de um problema nas agências governamentais. Existem diferentes plataformas nas quais você pode registrar uma reclamação: sites de agências governamentais, páginas em redes sociais, centrais de atendimento.
Nossa tarefa era criar um único pipeline para processar aplicativos para todos os departamentos.
O principal objetivo do sistema é acelerar o processo de processamento de chamadas o máximo possível: automatizar tudo automatizado, controlar o tempo em cada etapa do processo, informar os moradores sobre cada etapa.
Uma das tarefas específicas do projeto foi a questão da integração com um grande número de sistemas externos.
- Era necessário aprender em diferentes locais para levar todo o fluxo de reclamações, poder se comunicar com eles sobre todas as alterações nos pedidos, conduzir correspondência entre funcionários públicos e cidadãos para esclarecer os detalhes das reclamações.
- Além disso, entregamos algumas das funções a serviços de terceiros.
Porque Havia muitos dados, muitas vezes tinham que trabalhar no modo assíncrono; a equipe do projeto precisava resolver o problema, para não estrangular a si mesma e a sistemas de terceiros. A solução foi encontrada no broker de mensagens de software Rabbit MQ. Era uma nova tecnologia para a equipe na época.
Abaixo está uma entrevista com o desenvolvedor do back-end do projeto, Alexander Shcheglov,
WilyLynx , que lidou com o problema e implementou a integração.
- Sasha, olá! Por favor, diga-nos em poucas palavras o que é o Rabbit MQ?O software destina-se principalmente à implementação de mensagens atrasadas entre diferentes clientes, ou seja, quando você não precisa de uma resposta agora.
- Entendi corretamente que, em geral, funciona assim: o serviço de envio na fila criada coloca os dados à medida que são gerados, o serviço de recebimento leva essas informações conforme necessário?É exatamente isso que funciona.
- Por que você (equipe de desenvolvimento) escolheu esta solução para o projeto?Por várias razões. Em primeiro lugar, no nosso caso, o processamento síncrono (recebido e processado ao mesmo tempo) não é crítico, ou seja, uma mensagem pode ficar na fila por um tempo. Além disso, facilidade de uso: para receber mensagens, você só precisa declarar o nome da fila e não há necessidade de gravar seus serviços. Bem, a disponibilidade de bibliotecas para o YP comum. Não há necessidade de inventar nada para trabalhar com o RabbitMQ.
- Entendi corretamente que o Rabbit MQ permite controlar a troca de dados entre sistemas e serviços da web?Em vez disso, ainda administramos o intercâmbio, mas o “coelho” é uma excelente ferramenta para organizar esse intercâmbio. Aqui você tem a vida útil das mensagens nas filas, o tamanho máximo da fila, as configurações de acesso, o armazenamento em cluster e vários protocolos de troca, além de um sistema de plug-in e muito mais.
- Como é determinado que a mensagem foi entregue? - isto é, como é determinado que o cliente prolongou algo após o recebimento ou ficou parado no processo?Considera-se entregue se, dentro de um certo período de tempo, uma resposta do cliente chegar. Na verdade, ele diz que recebeu e ficou satisfeito com a vida. O cliente pode enviar uma resposta assim que recebida e tentar processar a mensagem. Talvez, pelo contrário, primeiro tente processar e, se for bem-sucedido, envie uma resposta. Ou você pode avisar o coelho com antecedência para que ele não espere a confirmação da entrega de você e apenas receba mensagens. Todos os itens enviados serão automaticamente considerados entregues.
- É possível, por exemplo, receber de alguma forma não todas as mensagens, mas, por exemplo, assinar apenas mensagens em um aplicativo específico?Existe uma situação um pouco diferente. Existe uma opção para enviar mensagens em que as mensagens chegam a todos os clientes. Esta opção é chamada "publicar / assinar". Um bom exemplo: uma nova mensagem em seu público. Você enviou todos os signatários recebidos. E já no recebimento eles pensaram em ler ou não ler. Em geral, ninguém incomoda você criar uma fila separada para si mesmo e trabalhar apenas com ela. Nesse caso, o roteamento já estará no nível do aplicativo e o coelho como um canal de comunicação.
- Sasha, diga-me, existe uma opção não para criar milhares de filas, mas para filtrar e rotear uma?De um não funcionará, mas o Rabbit permitirá que algum roteamento seja feito.
- Por favor, conte-nos mais.Um deles não é, mas existem conceitos como "troca" e "chave de roteamento":
P - produtor, remetente da mensagem em troca
X - trocar-se
Listras vermelhas - linhas
C1 e C2 - destinatários

O Pabbit pode enviar uma mensagem em troca de uma determinada chave (por exemplo, erro / informação / aviso). E como você pode ver, diferentes destinatários são voltados para o recebimento de mensagens com diferentes chaves de roteamento. Além disso, apenas C2 receberá uma mensagem com a tecla "info" e ambos receberão uma mensagem com a tecla "error". Também é possível receber mensagens de acordo com o modelo da chave. Isso é para outro tipo de troca "Publicar / Assinar", que mencionei anteriormente.

Como você pode ver em qualquer caso, para cada um dos destinatários nesses tipos de trocas, há uma curva, mas, no final, ainda temos alguma aparência de filtragem / roteamento.
- Como você se lembra dos problemas que surgiram durante o estudo e a implementação do Rabbit?Além da preguiça, não. Sério, documentação clara, um grande número de exemplos.
- Você já transferiu todas as trocas com serviços e sistemas externos para ele?Agora temos 38 filas: intercâmbio entre circuitos, sistemas externos, BI. Infelizmente, porém, alguns serviços (departamentos de leitura) estão resistindo. porque eles implementaram descanso. Além disso, alguns tipos de interações envolvem o recebimento simultâneo de respostas a solicitações.
- O que você acha, qual foi o sucesso dessa decisão?Para colaboração entre agências que não requer uma resposta síncrona? Para mim, é uma ótima opção.
Lista de materiais utilizados