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
- https://github.com/Azure/amqpnetlite/tree/master/Examples/Interop
- Projetos .Client e .Server
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".