Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Proxy 如何将部分请求转发到Clojure中的另一台服务器? 总结_Proxy_Clojure_Leiningen_Http Kit_Pedestal - Fatal编程技术网

Proxy 如何将部分请求转发到Clojure中的另一台服务器? 总结

Proxy 如何将部分请求转发到Clojure中的另一台服务器? 总结,proxy,clojure,leiningen,http-kit,pedestal,Proxy,Clojure,Leiningen,Http Kit,Pedestal,我正在开发一个服务器,它类似于Clojure中的代理,以基座服务+lein为基础: 接收请求 将请求转发到外部服务器 向服务器发出多个请求以提供更大的json,并作为单个请求返回到客户端 编写代码很容易,而且有很多关于如何为路线提供服务的资源, 然而,我找不到任何简单的方法,如何将Clojure底座休息服务与转发路线结合起来 例子 客户端调用[GET]/billing=>proxy clojure服务器 代理clojure服务器使用客户端凭据验证请求=>验证服务器 代理clojure服务器

我正在开发一个服务器,它类似于Clojure中的代理,以基座服务+lein为基础:

  • 接收请求
  • 将请求转发到外部服务器
  • 向服务器发出多个请求以提供更大的json,并作为单个请求返回到客户端
编写代码很容易,而且有很多关于如何为路线提供服务的资源,
然而,我找不到任何简单的方法,如何将Clojure底座休息
服务与转发路线结合起来

例子
  • 客户端调用[GET]/billing=>proxy clojure服务器
  • 代理clojure服务器使用客户端凭据验证请求=>验证服务器
  • 代理clojure服务器用计费数据填充json=>计费服务器
  • 代理clojure服务器用客户数据填充json=>客户服务器
  • 代理clojure服务器返回200,并解析完整的JSON
安装程序
  • 我有一个与以下项目结构类似的项目: lein新底座服务我的应用程序
我一直在尝试的
  • 我一直在尝试使用类似
例如:

(ns your-ns
  (:require [tailrecursion.ring-proxy :refer [wrap-proxy]]))

(def app
  (-> routes
      (wrap-proxy "/remote" "http://some.remote.server/remote")))
我只是不能把基座上的路由系统和这个代理解决方案混合在一起,路由是不同的,看起来,也许我需要用不同的方法

免责声明
  • 我知道nginx、varnish和任何其他负载均衡器也可以完成基本的转发。但我的想法是填充来自不同服务器的数据,从而简化客户端的操作
  • 你可能已经注意到,我是Clojure的新手。我已经没有选择了,因为谷歌关于这一点也很复杂,有时毫无用处

  • 您正在创建一个接收请求的服务器。在服务器中,您可以充当向另一台服务器发出请求的客户端。然后,您可以将收到的响应修改或聚合到发送给原始客户端的响应中

    请参阅以提出请求。Clojure工具箱列出了许多其他选项


    您可能还对以下内容感兴趣。

    请查看
    铃声请求代理。从文档中:

    (ns myapp.core
      (:require [ring-request-proxy.core :as proxy])
    
    ; Middleware format: Delegates request to handler when request can't be forwarded
    (def app (-> not-found-handler
                 (proxy/proxy-request {:identifier-fn :server-name
                                       :host-fn {"my-server" "http://my-internal-server"}})))
    

    您应该将它设置为所有要代理的路由的中间件。

    我明白了,我也在考虑在这种情况下使用clj,感谢您指出,但请想象一下,对于一组资源(其中很多),例如。g/customer/*所有请求都可以直接转发到外部服务器,无需聚合。如果请求位于某个通配符url中,那么使用类似代理的解决方案转发所有请求不是更容易吗?然后对于路由中定义的其他路由,我可以确定,正如您所说的,使用CLJHTTP