O Impacto discutido nesse documento é referente aos EAI das marcas: Protheus, RM e Datasul

Request/Reponse AMQP 1.0

  • Uma fila única de requests por server
  • Uma fila temporária de response por client
  • Propriedade “reply-to” define o node dinâmico da resposta

Principais mudanças

  • É preciso lidar com a hierarquia Connection → Session → Links
  • É preciso criar paired links
    • SenderLink
    • ReceiverLink
  • Remover métodos de "basicPublish()" e "basicConsume()"
  • Remover exchanges

Exemplos de código

Protheus

  • É necessário que a Tech implemente suporte ao AMQP 1.0.
    • Atualmente, não é suportado, conforme descrito em tAMQP
  • Refatoração de FWEAIAMQP.prw (Server) para utilizar paired links (Exemplo)
  • Refatoração de FWEAIUtil.prw / FwSendEAI() (Client) para utilizar paired links (Exemplo)

Nenhuma dessas refatorações é complexa, desde que a o objeto forneça as ferramentas necessárias

RM

  • Refatoração (Ou criação de abstração) para fontes da pasta AMQP - EAIAmqpService, Connection e Consumer. Essas são responsáveis pelo recebimento, e sobem com o host.
  • Refatoração da classe EAIAMQPClient (EAIAMQPClientBuilder.cs). Essa é responsável pelo envio. 
  • Trocar da biblioteca de client AMQP do Rabbit para amqpnetlite

Mais uma vez, não é uma refatoração complexa.
Só é preciso definir se ela precisa existir em conjunto com o AMQP 0.9 através de abstração (O que aumentaria a complexidade), ou se pode ser substituída.

Datasul

No Datasul a refatoração seria realizada no projeto totvseai-mb para a utilização do AMQP 1.0. Hoje a Pivotal (responsável pelo RabbitMQ) não possui um cliente específico para o AMQP 1.0. No próprio Github "https://github.com/rabbitmq/rabbitmq-amqp1.0" eles citam outros clientes Java para o uso do AMQP 1.0.

Foram analisados outras implementações para o Datasul, o TJF (Totvs Java Framework) e o Spring Cloud Stream. O TJF utiliza o Spring Cloud Stream para uso de mensageiria, porém este componente até onde foi analisado, não deixa claro o suporte ao estilo de mensagens "Request Response". Existe a possibilidade de trabalhar com estilo "Request Response" porém teria que mudar o Datasul para utilizar um Message Broker compatível com AMQP 1.0 e que também suporte o estilo "Request Response".

O Message Broker que possui essas características é o ActiveMQ. No link a seguir há uma implementação que atende este padrão de mensagem https://michaelrice.com/2015/05/the-simplest-jms-requestreply-i-could-come-up-with-for-activemqjboss-a-mq/

Se for utilizar o RabbitMQ  no Datasul a sugestão é realizar um estudo mais aprofundado para o uso do estilo "Request Response".


  • Sem rótulos