Google app engine Google应用程序引擎拉队列的参数和负载之间的差异

Google app engine Google应用程序引擎拉队列的参数和负载之间的差异,google-app-engine,pull-queue,Google App Engine,Pull Queue,我的项目基于GAE/J,并利用了最近启动的PULL队列,但我认为这个问题也可以应用于Python 基本上,当我将一个任务放入PULL队列时,我需要设置一些任务参数,以便后面的使用者拾取它 我以两种方式在params设置中实现了: 1) 通过使用param(): 2) 通过使用有效负载(): 这两种方法都是有效的,但是,我想知道的是这两种方法之间的区别,以及哪种方法应该是效率或便利性方面的首选方法 我可以看到,通过使用param(),可以轻松设置多个参数,也可以轻松地为使用者检索参数。 但对于一个

我的项目基于GAE/J,并利用了最近启动的PULL队列,但我认为这个问题也可以应用于Python

基本上,当我将一个任务放入PULL队列时,我需要设置一些任务参数,以便后面的使用者拾取它

我以两种方式在params设置中实现了:

1) 通过使用
param()

2) 通过使用
有效负载()

这两种方法都是有效的,但是,我想知道的是这两种方法之间的区别,以及哪种方法应该是效率或便利性方面的首选方法

我可以看到,通过使用
param()
,可以轻松设置多个参数,也可以轻松地为使用者检索参数。 但对于一个参数的情况,有效负载可能会更方便,因为它可以保存代码以捕获使用者提取参数时抛出的异常

然而,我很高兴知道除了我所说的外,这两者之间还有什么区别。

根据,我想说,在你的情况下是完全相同的

在拉取请求中,如果已指定有效负载,则不要指定参数。参数编码为application/x-www-form-urlencoded并设置为有效负载


TaskOptions的.param()和.payload()函数存在差异。您可以按如下方式使用这些功能:

  • taskOptions.param(“param1”、“发票_3344”); 现在在接收端,假设您正在调用一个servlet,在HttpRequest中,您可以将发送的参数作为请求参数接收

    公共类MyInvoiceTask扩展了HttpServlet{ 受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{ 字符串invoiceNum=request.getParameter(“param1”); } }

  • 现在假设您想要序列化包含大量数据的整个自定义类对象。在这种情况下,您需要在内部使用user.payload()函数,它在请求正文中发送有效负载数据

    //**自定义类对象 人员=新人(“Abc”,“孟买”,22)

    //**将对象转换为JSON,以便可以转换为字符串(负载所需)

    //**使用Gson库 Gson Gson=新的Gson(); String personObjString=gson.toJson(person); //**将有效负载作为字节数组放入任务选项中 有效载荷(personObjString.toByteArray())

    现在,在接收器端,让我们假设使用servlet,然后从HttpRequest对象,我们需要获取有效负载字节数组,并将其转换回cutsom对象,即本例中的“Person”类对象。 私有字节[]getPayloadFromHttpRequest(HttpServletRequest req)引发IOException { InputStream InputStream=req.getInputStream(); ByteArrayOutputStream ByteArrayOutputStream=新建ByteArrayOutputStream()

    //**现在,这个接收到的byteArray可以与Gson一起使用,将其转换回Person对象 字节[]有效载荷=getPayloadFromHttpRequest(请求); Gson Gson=新的Gson(); String personJsonString=新字符串(有效负载); Person-Person=gson.fromJson(personJsonString,Person.class)

  • TaskOptions taskOptions = TaskOptions.Builder.
                    withMethod(TaskOptions.Method.PULL);
    taskOptions.param("param", paramValue);
    taskOptions.param("param2", paramValue2);
    
    TaskOptions taskOptions = TaskOptions.Builder.
                        withMethod(TaskOptions.Method.PULL);
    taskOptions.payload("payloadValue");
    
        int length;
        byte[] buffer = new byte[1024];
    
        while ((length = inputStream.read(buffer)) >= 0)
            byteArrayOutputStream.write(buffer, 0, length);
    
        if (byteArrayOutputStream.size() > 0){
            return byteArrayOutputStream.toByteArray();
        }
        return null;
    }