2017-05-17 9 views
1

Je souhaite rediriger la requête Web vers un autre service. Je ne veux rien changer à leur sujet et les envoyer à un autre service (je suppose avec quelque chose comme http-clj). Le résultat fera alors le même saut. Ceci est nécessaire car nous remplaçons une partie du service, mais nous ne pouvons pas avoir le service d'appel client directement.Créer un nouvel appel HTTP depuis Ring Request

Nous déployons dans un tomcat mais en général, il devrait fonctionner pour n'importe quelle demande d'anneau.

Existe-t-il une manière élégante de faire ceci?

Merci

Répondre

3

Ce n'est pas une réponse spécifique à anneau, mais je pense que vous seriez mieux d'utiliser un proxy inverse comme Nginx devant votre ancien service Web et le nouveau service web de remplacement. Un proxy inverse peut facilement répondre à différentes URL entrantes et les transmettre de manière transparente au bon service Web en coulisses. C'est une approche flexible et puissante qui permettra de nombreuses variations de schémas d'URL partitionnées à mesure que votre service se développera.

0

Je l'ai fait pendant des années avec des cas où une demande vient dans un il doit aller à deux endroits différents. (La lueur de la file d'attente sur les microservices et la loi des conséquences inattendues ici) J'ai généralement décidé de l'utilisation de core.async avec http-kit.

(handler ..... 
    (let [output (chan)] 
     (http/post bakcend-url (make-new-request-options request) 
       #(do (async/>!! output %) 
         (async/close! output))) 
     (go (async/<! (async/timeout 2000)) 
      (async/>! output {:status 500})) 
    ...)