是否可以使用与String不同类型的参数调用任务队列? 我的代码目前看起来像这样,但队列中的代码永远不会到达:( Playframework coding)
public static void addOrUpdateShops(byte[] xmlFile) {
checkUserExists();
QueueFactory.getDefaultQueue().add(withUrl("/DataTransferController/addOrUpdateShopz").param( "xmlFile", xmlFile).method(TaskOptions.Method.POST));
renderText("Added to queue");
}
public static void addOrUpdateShopz(byte[] xmlFile) throws Exception {
Logger.debug("Running queue task (addOrUpdateShopszz)");
ShopModelUtilities.addShops(xmlFile);
}
THX
答案 0 :(得分:3)
答案 1 :(得分:3)
Peter's answer是正确的,但此外,您无法发送同时定义了payload和param的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)
。
答案 2 :(得分:0)
简短的回答是不,它是HTTP,所以只传递字符串。很长的答案是肯定的,你可以序列化一个对象,然后使用ObjectInputStream来读取它并将其转换回一个对象,但你必须手动执行或者使用像Jersey(jax-rs)或json reader这样的东西来自动反序列化它回到了一个对象。
答案 3 :(得分:0)
查看调用延迟函数 - 更多的有效负载灵活性。记住,对TQ的直接调用有一个10k的限制,如果你的有效载荷类似于jpeg,你可以快速命中。 http://code.google.com/appengine/articles/deferred.html