1

私のプロジェクトは GAE/J に基づいており、最近リリースされた PULL キューを利用していますが、この質問は Python にも適用できると思います。

基本的に、タスクを PULL キューに入れるときは、後のコンシューマーがそれを取得できるように、タスクのいくつかのパラメーターを設定する必要があります。

私は両方の方法で params 設定に実装しました:

1) を使用してparam():

TaskOptions taskOptions = TaskOptions.Builder.
                withMethod(TaskOptions.Method.PULL);
taskOptions.param("param", paramValue);
taskOptions.param("param2", paramValue2);

2) を使用してpayload():

TaskOptions taskOptions = TaskOptions.Builder.
                    withMethod(TaskOptions.Method.PULL);
taskOptions.payload("payloadValue");

どちらのアプローチも機能していますが、私が知りたいのは、この 2 つの違いと、効率や利便性の観点からどちらの方法が望ましいかです。

を使用するparam()と、複数のパラメーターを簡単に設定でき、コンシューマーのパラメーターを簡単に取得できることがわかります。ただし、パラメーターが 1 つの場合、ペイロードは、コンシューマーがパラメーターを抽出するときにスローされる例外をキャッチするコードを保存するため、より便利になる場合があります。

ただし、私が言及したこととは別に、これら2つの違いをさらに知りたいと思います.

4

2 に答える 2

1

python documentationによると、あなたの場合はまったく同じだと思います。

PULL リクエストでは、すでにペイロードを指定している場合は params を指定しないでください。パラメータは application/x-www-form-urlencoded としてエンコードされ、ペイロードに設定されます。

于 2012-06-14T00:32:20.073 に答える
1

TaskOptions の .param() 関数と .payload() 関数に違いがあります。これらの関数は次のように使用できます。

  1. taskOptions.param("param1","Invoice_3344"); 受信側で、HttpRequest で servlet を呼び出しているとします。送信されたパラメーターを要求パラメーターとして受け取ることができます。

    public class MyInvoiceTask extends HttpServlet{ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String invoiceNum = request.getParameter("param1"); } }

  2. ここで、膨大なデータを持つカスタム クラス オブジェクト全体をシリアライズしたいとします。このような場合、.payload() 関数を内部的に使用する必要があり、リクエスト本文でペイロード データを送信します。

    //**カスタム クラス オブジェクト Person person = new Person("Abc", "Mumbai", 22);

    //**オブジェクトを JSON に変換して、文字列に変換できるようにします (ペイロードに必要)

    //**Gson ライブラリを使用 Gson gson = new Gson(); String personObjString = gson.toJson(person); //**ペイロードをタスクオプションにバイト配列として入れます taskOption.payload(personObjString.toByteArray());

    受信側では、サーブレットを使用して、HttpRequest オブジェクトからペイロード バイト配列を取得し、カットサム オブジェクト、つまりこの場合は「Person」クラス オブジェクトに戻す必要があります。private byte[] getPayloadFromHttpRequest(HttpServletRequest req) throws IOException { InputStream inputStream = req.getInputStream(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

        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;
    }
    

    //**これで、この受信した byteArray を Gson で使用して、Person オブジェクトに戻すことができます byte[] payload = getPayloadFromHttpRequest(request); Gson gson = 新しい Gson(); String personJsonString = new String(payload); Person person = gson.fromJson(personJsonString, Person.class);

于 2017-05-28T02:42:46.587 に答える