如何将部分请求转发到 Clojure 中的另一台服务器?
How can I forward part of requests to another server in Clojure?
总结
我正在开发一个类似于 Clojure 中的代理的服务器,以 pedestal service + lein 作为基础:
- 接收请求
- 将请求转发到外部服务器
- 进行服务器到服务器的多个请求,以将更大的 json 和 return 作为单个请求提供给客户端
编码很容易,关于如何提供路由的资源很多,
但是我找不到任何简单的方法,如何将 Clojure 基座
服务与转发路由一起使用
例子
- 客户端调用 [GET] /billing => proxy-clojure-server
- proxy-clojure-server 使用客户端凭据验证请求=> auth-server
- proxy-clojure-server 用计费数据填充 json => billing-server
- proxy-clojure-server 用客户数据填充 json => customer-server
- proxy-clojure-server returns 200 已完成 JSON 已解决
设置
- 我有一个结构类似的项目:
lein new pedestal-service my-app
我一直在尝试的
示例:
(ns your-ns
(:require [tailrecursion.ring-proxy :refer [wrap-proxy]]))
(def app
(-> routes
(wrap-proxy "/remote" "http://some.remote.server/remote")))
我只是无法将基座的路由系统与此代理解决方案混合使用,路由不同,看起来,也许我需要用不同的方法来实现
免责声明
- 我知道基本转发可以通过 nginx、varnish 和任何其他负载均衡器完成。但我的想法是填充来自不同服务器的数据,从而简化客户端
- 我是 Clojure 的新手,您可能已经注意到了。而我运行没办法了,因为google关于那个也很复杂,有时候没用
您正在创建一个接收请求的服务器。在您的服务器中,您可以充当向另一台服务器发出请求的客户端。然后,您可以将收到的响应修改或聚合到发送给原始客户端的响应中。
请参阅 the clj-http library 提出请求。 Clojure 工具箱列出了许多其他选项。
您可能还对this list of documentation resources感兴趣。
看看 ring-request-proxy
而不是 here。来自文档:
(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"}})))
您应该将其设置为您要代理的所有路由的中间件。
总结
我正在开发一个类似于 Clojure 中的代理的服务器,以 pedestal service + lein 作为基础:
- 接收请求
- 将请求转发到外部服务器
- 进行服务器到服务器的多个请求,以将更大的 json 和 return 作为单个请求提供给客户端
编码很容易,关于如何提供路由的资源很多,
但是我找不到任何简单的方法,如何将 Clojure 基座
服务与转发路由一起使用
例子
- 客户端调用 [GET] /billing => proxy-clojure-server
- proxy-clojure-server 使用客户端凭据验证请求=> auth-server
- proxy-clojure-server 用计费数据填充 json => billing-server
- proxy-clojure-server 用客户数据填充 json => customer-server
- proxy-clojure-server returns 200 已完成 JSON 已解决
设置
- 我有一个结构类似的项目: lein new pedestal-service my-app
我一直在尝试的
示例:
(ns your-ns
(:require [tailrecursion.ring-proxy :refer [wrap-proxy]]))
(def app
(-> routes
(wrap-proxy "/remote" "http://some.remote.server/remote")))
我只是无法将基座的路由系统与此代理解决方案混合使用,路由不同,看起来,也许我需要用不同的方法来实现
免责声明
- 我知道基本转发可以通过 nginx、varnish 和任何其他负载均衡器完成。但我的想法是填充来自不同服务器的数据,从而简化客户端
- 我是 Clojure 的新手,您可能已经注意到了。而我运行没办法了,因为google关于那个也很复杂,有时候没用
您正在创建一个接收请求的服务器。在您的服务器中,您可以充当向另一台服务器发出请求的客户端。然后,您可以将收到的响应修改或聚合到发送给原始客户端的响应中。
请参阅 the clj-http library 提出请求。 Clojure 工具箱列出了许多其他选项。
您可能还对this list of documentation resources感兴趣。
看看 ring-request-proxy
而不是 here。来自文档:
(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"}})))
您应该将其设置为您要代理的所有路由的中间件。