将 JSON POST 数据传递给 Ignite 2.7 ComputeTask

Pass JSON POST Data to Ignite 2.7 ComputeTask

我有一个复杂的 API 请求需要将 JSON 数据传递给 Ignite ComputeTask,但我似乎只能通过 URL 查询字符串传递数据,这看起来很尴尬,而且可能有局限性。我有两个问题:

  1. Ignite REST API 是否有最大 GET 请求限制,如果有,是否有增加限制的方法?

  2. 有什么方法可以通过POST请求传入JSON数据吗?我已经尝试过 ConnectorMessageInterceptor,但是 args 参数只是查询字符串中 p1 的值。

  1. 您可以提供 your own Jetty config,这可能会让您配置 GET 请求限制。
  2. 你真的试过用application/x-www-form-urlencoded做POST吗?
  1. 如果您可以将 JSON 数据作为 GET 参数传递,您可以使用 <Set name="requestHeaderSize">BYTES</Set> 在连接器配置的码头配置中设置最大 GET 大小,虽然这显然不是最佳解决方案。

  2. 简短的回答是否定的,在 Ignite 的 built-in REST 中没有 built-in 拦截 JSON POST body 数据的方法API。尽管 Ignite 文档建议您配置 Jetty 的处理程序,但 Ignite 2.7 的 Jetty 实现(参见 GridJettyRestProtocol)实际上用它自己的 GridJettyRestHandler 覆盖了已配置的处理程序,后者只接受 /ignite? cmd=命令名称&p1=参数&名称=任务名称。要解决此问题,您可以删除 ignite-rest-http 库并推出您自己的码头实施。如果这看起来工作量太大并且不介意有点 hacky 的解决方案,您可以搭载 ignite 的可选 lib 结构,并从 ignite-rest-http lib 复制文件 org.apache.ignite.internal.processors.rest.protocols.http.jetty.GridJettyRestProtocol,Ignite 会自动在启动时拿起。在 GridJettyRestProtocol 中,将 GridJettyRestHandler 换成您自己接受 POST 数据的自定义 AbstractHandler。记得导入jetty作为项目依赖