Google app engine 以文件或字节[]作为参数的TaskQueue POST请求(Java)

Google app engine 以文件或字节[]作为参数的TaskQueue POST请求(Java),google-app-engine,playframework,Google App Engine,Playframework,是否可以使用与字符串类型不同的参数调用taskqueue? 我的代码当前看起来是这样的,但是队列中的代码永远不会到达:(Playframework编码) Thx简短的回答是否,它是HTTP,因此只传递字符串。答案很长,是的,您可以序列化一个对象,然后使用ObjectInputStream读取它并将其转换回一个对象,但您必须手动执行此操作,或者使用类似Jersey(jax rs)或json读取器的工具将其自动反序列化回一个对象。可以。在现有的基础上使用或。看看调用一个延迟函数——更灵活的负载。记住

是否可以使用与字符串类型不同的参数调用taskqueue? 我的代码当前看起来是这样的,但是队列中的代码永远不会到达:(Playframework编码)


Thx

简短的回答是否,它是HTTP,因此只传递字符串。答案很长,是的,您可以序列化一个对象,然后使用ObjectInputStream读取它并将其转换回一个对象,但您必须手动执行此操作,或者使用类似Jersey(jax rs)或json读取器的工具将其自动反序列化回一个对象。

可以。在现有的基础上使用或。

看看调用一个延迟函数——更灵活的负载。记住,对TQ的直接调用有一个10k限制,如果您的负载类似于jpeg,您可能会很快达到该限制。 是正确的,但除此之外,您无法发送同时定义了有效负载和参数的POST请求。试图同时设置这两个值将触发:

java.lang.IllegalArgumentException: 
    Message body and parameters may not both be present; 
    only one of these may be supplied

根据您的代码示例,如果要在TaskQueue请求中发送byte[]负载,则必须从TaskOption的生成器链中删除
.param(“xmlFile”,xmlFile)

Http可以很好地传输二进制文件,例如图像。啊,一篇文章。你说得对。因此,您需要按照上述建议执行操作,或者像上传文件一样发送多部分内容。该限制实际上是100k,而且AFAIK也适用于延迟任务:除非最近发生了变化,否则根据提供的文档链接,该限制声明为“任务队列项目限制为10kb的相关数据”。通过使用实体可以很容易地绕过延迟严格限制。实体限额为1兆欧。在执行延迟调用时,您可以通过尝试将实体负载大小保存到具有相同限制的memcache来轻松检查实体负载大小。如果memcache写入失败,您知道延迟调用也会失败。除了GAE文档之外,还有一个扩展延迟呼叫的非常好的链接,但是我没有时间去追踪它。嗯,没错。但是在文档中说:
无需惊慌,但是:如果您试图将一个太大而无法单独放入队列的任务排队,延迟库将自动在数据存储中创建一个新实体来保存有关任务的信息,并在任务运行后删除该实体。这意味着在实践中,一旦序列化,您的函数调用可以达到1MB。
对,我想我在第二条评论中已经注意到了这一点,但忘记了立即转换。谢谢
java.lang.IllegalArgumentException: 
    Message body and parameters may not both be present; 
    only one of these may be supplied