# CQRS Hoje temos os bancos todos separados, e precisavamos unificar eles para fazer joins. Não temos campos customizados na pesquisa avançada. Com o CQRS vamos ter estes campos. O Report consome o CQRS, para montarmos consultas com joins é utilizado o CQRS por baixo para montar as consultas. O importação CSV vai consumir o CQRS. O elasticSearch é um banco não relacional, que trabalha com indice e documentos, o **indice** é como se fosse as tabelas e os **documentos** são como se fosse as colunas. Para acessar utilizamos o serviço do PRESTO para fazer a conexão e as consultas no elasticSearch. ### Consultando no elasticSearch A consulta é feita dentro do container do PRESTO por linha de comando. **Comandos:** presto --catalog elasticsearch --schema default show tables; ## Mensageria A mensageria utiliza o serviço HERMOD. A amazom aws (SNS e SQS) é o serviço que utilizamos para publicar e consumir eventos. **SNS** Topics: Utilizamos o qabtb_service Topicos são aonde nós publicamos os eventos (mensagem). Quando um serviço utiliza um topico? Quando é necessario publicar mensagens. **SQS** São as filas, fica monitorando os topicos. Consigo ver quais tópicos as filas consomem. **Entidades trabalhadas pelo CQRS são:** * CUSTOMER * LEAD * CONTACT * SALES ORDER * PRODUCT * ACTIVITY * OPPORTUNITY * OPPORTUNITY_ITEMS (não pronta) * BTB (precisa somente para montar o contrato) > O CQRS se basea totalmente no BTB como um contrato > Meta-object são as tabelas (Indice) > Meta-atribute são as colunas (Documentos) > Customization-lake são os registros (Somente dos dados customizados) ### Exemplo prático: Eu crio uma oportunidade e salvo (O registro e salvo na tabela opportunity); A mesma ação de salvar acontece na tabela de message_broke_event (Isso se chama um evento) (sempre se lembre desta tabela) Ela é publicada dentro do tópico do opportunity no SNS E ai os serviços vão consumir conforme as filas (SQS), o que importa para nós é a fila do bragi. ### Criando um tópico (SNS) e uma fila (SQS) Para criar um Topic (SNS) Procure por SNS nos Services ![](https://i.imgur.com/o29dkAb.png) Clique em Topic na sidebar a esquerda e em Create topic para cadastrar um tópico ![](https://i.imgur.com/yliIj18.png) Marque a opção Standard preencha o Name conforme o padrão ![](https://i.imgur.com/ELBhPQu.png) Depois clique em Create topic ![](https://i.imgur.com/6VbsFNc.png) Após criar o Topic copie o ARN ![](https://i.imgur.com/x6VYRBQ.png) Pronto agora o Topic foi criado, então vamos cadastar uma fila para ele: Para isto abra uma nova aba, mas mantenha a aba do Topic aberta, com a AWS e procure nos Services por SQS ![](https://i.imgur.com/AdmVGEz.png) Clique no botão Create queue ![](https://i.imgur.com/8BMI0hP.png) Marque a opção Standard e preencha o campo Name conforme o padrão ![](https://i.imgur.com/yUX9QkN.png) Clique em Create queue para finalizar o cadastro da fila ![](https://i.imgur.com/PqF7uuO.png) Após ter cadastrado a fila, vamos escrever ela no Topic do SNS: Procure por ela pesquisando pelo nome no campo de pesquisa; Quando encontrar, selecione ela clicando no radio button; Clique na select Actions que fica ao lado do botão Create queue; Clique na opção Subscribe to Amazon SNS topic; ![](https://i.imgur.com/nFTmp2E.png) Agora na tela de Subscribe to Amazon SNS topic: Clique na select Specify an Amazon SNS topic available for this queue; Selecione a opção Enter Amazon SNS topic ARN; ![](https://i.imgur.com/HgszPtw.png) Vai abrir uma caixa de texto An Amazon SNS topic that can send notifications to an Amazon SQS queue: Cole o ARN copiado após a criação do Topic; Clique no botão Save; ![](https://i.imgur.com/N6Qitmr.png) Após salvar a inscrição da fila no topic, vamos rolar a pagina para baixo até aparecer varias colunas com opções: Clique na opção SNS subscriptions; Marque o Topic que você criou anteriormente; Clique em View SNS; ![](https://i.imgur.com/DkvYOfy.png) Vamos ser redirecionados para o SNS em outra aba: Nela vamos clicar em Edit; ![](https://i.imgur.com/U0ywTcV.png) Após clicar em Edit na proxima tela vamos marcar a opção Enable raw message delivery; ![](https://i.imgur.com/17oaUMl.png) Depois é só clicar em Save changes ![](https://i.imgur.com/lxpjq3B.png) --- Para poder-mos monitorar as messages de uma fila podemos marcar a opção **Poll for messages** dentro da fila: Para isto edite uma fila (SQS / QUEUE) ![](https://i.imgur.com/GWrfZJv.png) No bloco Receive message marque a opção **Poll for message** ![](https://i.imgur.com/OnYqIyS.png) ## WarmUp Serviço criado para atualizar bases que já contenha dados. **Como fazer o processo:** * Vamos no rancher * Em Infraestrutura * Dar um upgrade no elasticSearch (Caso não tenha mais de um tenant) * Dar upgrade no PRESTO * Dar um drop no tenant na base do BRAGI * Criar o tenant novamente * Vou na AWS no SQS nas filas QUEUES do qabtb_service * Marco a fila que tem mensagem e dou um PURGE para deletar as mensagem da fila (!Atenção para não deletar as mensagens das filas que outras pessoas estão usando!) * No caso de não poder deletar a fila, entrar dentro da fila, clico em send and receive messages, e clico em Poss for messages. Vou clicar na mensagem e ver se é do meu tenant, ai se for eu deleto. * Após todo o processo de remoção das filas/message, rodar as migrations (flyway) * Dar upgrade no container do BRAGI (Para iniciar o warmUp) * Dar um view log para ver o processo Existe um comando no postman para limpar todos os dados de um tenant no elastiSerch sem precisar reiniciar o container, caso aja mais de um tenant cadastrado no elasticSearch: `<url>:9200/tenant_3_*` > Não há suporte para update de um meta_object, portanto da erro no processamento do message-broker. > Existe um parametro para configurar o numero de tentativas até falhar. Para testar a collection (Ex: AWS - SNS/SQS (Customer) CR) onde valida o SQS e SNS Foi criado uma stack QA-GoAWS no ambiente BTB Foi criado databases separadas dos serviços que utilizam mensageria. Ex: opportunityaws Esta utilizando o tenant_3 Antes de rodar a collection: Preciso entrar na stack QA-GoAWS Dar upgrated no container postgrest/postgrest:latest Editar o parametro PGRST_DB_URI setando o banco do serviço que eu vou testar: ![](https://i.imgur.com/ncog7kL.png)