适用于Java Development Server的Google App Engine任务队列REST API(devserver)

时间:2016-03-09 23:11:37

标签: java google-app-engine google-api-java-client task-queue

我在本地计算机上的Java Development Server(AKA devserver)上运行了一个GAE应用程序,它定义了一些任务队列拉取队列。

我想从我的机器上运行的其他独立Java应用程序中使用Task Queue REST API来访问这些拉取队列。

我尝试了the sample建议实施租赁任务的documentation。显然,它使用需要client_secrets.json格式文件的Google API Client Library for Java

{
  "installed": {
    "client_id": "retrieved from creating a Service Account for the project",
    "client_secret": "supposedly appears in the JSON file that's downloaded upon creation of a Service Account for the project"
  }
}

我为项目创建了一个服务帐户,并自动下载了JSON,格式如下:

{
  "type": "service_account",
  "project_id": "myProjectId",
  "private_key_id": "some long hexadecimal",
  "private_key": "an even longer encrypted stuff",
  "client_email": "myServiceAccountName@myProjectId.iam.gserviceaccount.com",
  "client_id": "a decimal number",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/myServiceAccountName%40myProjectId.iam.gserviceaccount.com"
}

在我的client_secrets.json文件中,我使用private_key_id作为client_secret值并执行了示例代码。

结果是它在我的浏览器中打开https://accounts.google.com/o/oauth2/auth,显示状态代码为400的错误,并显示以下消息:

  

错误:redirect_uri_mismatch应用程序:我的应用程序重定向   请求中的URI:http://localhost:61130/Callback与a不匹配   注册重定向URI。

我尝试了Taskqueue.Builder.setRootUrl("http://localhost:8080"),虽然它的javadoc说不要弄乱它。它返回了401 Unauthorized

  1. 有没有办法使用独立Java应用程序中的Task Queue REST API来访问这些拉取队列?我更喜欢使用谷歌提供的Java库,但显然它们会自动指向实际的GAE服务。
  2. 当我想在云端从Google App Engine租借任务时,我应该在client_secret文件中使用client_secrets.json 1 的值?
  3. 1 当我创建服务帐户时,由于我不是项目的所有者,我收到以下消息:

      

    无法将服务帐户添加到此项目的权限中   因为您不是该项目的所有者。提供服务   帐户访问此项目,请项目所有者将其添加到   项目权限。

    我想知道这是否与自动下载的JSON中缺少client_secret属性有关。

1 个答案:

答案 0 :(得分:0)

  1. 我不认为开发服务器会公开任务队列API,针对您创建的单独测试项目进行测试。

  2. 您可以使用服务帐户中的JSON连接到任务队列API,请参阅service accounts文档。

    GoogleCredential凭据= GoogleCredential.fromStream(新FileInputStream(“MyProject-1234.json”))     .createScoped(Collections.singleton( “https://www.googleapis.com/auth/taskqueue”));

    Taskqueue taskQueue = new Taskqueue.Builder(     httpTransport,JSON_FACTORY,凭证).setApplicationName(APPLICATION_NAME)     .setTaskqueueRequestInitializer(new TaskqueueRequestInitializer(){       @覆盖       public void initializeTaskqueueRequest(TaskqueueRequest request){         request.setPrettyPrint(真);       }     })建立();

    //获取队列

    com.google.api.services.taskqueue.model.TaskQueue queue = getQueue(taskQueue); 的System.out.println(队列);

    //租赁,执行和删除任务

    任务tasks = getLeasedTasks(taskQueue);