Essa ideia de arquitetura me soa bem estranha, talvez porque nunca a tenha visto. Algumas ideias: Porque o servidor A não repassa a requisição para o B, recebe/converte a resposta e manda pro seu cliente?
Você tem duas opções, se quer sincronia:
-
Efetuar requisições diretamente de A para B e repassar as respostas. A seria mais um “tradutor” ou uma espécie de “man in the middle” do bem
-
Fazer com que B fique dando pooling em A o tempo inteiro para saber se há requisições para atender
Se você pode trabalhar de forma assíncrona, pode fazer assim também: Quando A recebe uma requisição, manda uma mensagem para uma fila de processamento (que seria B) e retorna imediatamente ao cliente, falando que a requisição foi aceita e vai ser processada em breve. B vai processando o que vai chegando e notifica A que o processamento acabou. A pode mandar uma notificação para o cliente, se for necessário, avisando que sua requisição foi completada.
Não tenho nem ideia de como implementar a parte de pooling, acho que é uma pessima alternativa, porque cada requisição pros métodos do teu servidor web chega em uma thread diferente. A notificação de B para A vai chegar como outra requisição, em outra thread diferente da thread original do cliente. Como é que a gente faz para juntar essas duas?
É isso que me vem em mente, talvez outras pessoas tenham outras ideias mais interessantes!