GAE Java 11中如何将任务加入当前子域名的队列?
问题原因与解决方案
你遇到的404和域名指向错误,核心是AppEngineHttpRequest的默认行为:它会默认将任务请求路由到App Engine的默认服务、默认版本对应的主域名,而不是你当前代码运行的子域名对应的服务/版本。
你遗漏的是:没有在AppEngineHttpRequest中指定当前代码所在的服务(Service)和版本(Version)——App Engine的子域名通常是由服务、版本和项目ID组成的(比如your-service-dot-your-version-dot-project-id.appspot.com),不指定的话就会走默认配置,导致请求找不到对应路径出现404。
修正后的代码示例
如果要继续用AppEngineHttpRequest而不是通用HttpRequest,可以补充指定服务和版本:
String queuePath = QueueName.of(PROJECT_ID, LOCATION, QUEUE_NAME).toString(); Task.Builder taskBuilder = Task.newBuilder() .setAppEngineHttpRequest( AppEngineHttpRequest.newBuilder() .setRelativeUri(relativeUri) .setHttpMethod(HttpMethod.GET) // 指定当前运行的服务和版本 .setService("your-service-name") .setVersion("your-version-name") .build() ); Task task = client.createTask(queuePath, taskBuilder.build());
为什么通用HttpRequest能解决问题
你后来改用的setHttpRequest直接指定了完整的fullUri,其中包含了子域名信息,相当于手动指定了请求目标,绕过了AppEngineHttpRequest的默认路由规则,自然能正确指向目标地址。
内容的提问来源于stack exchange,提问作者Bruce Wilcox
相关产品推荐
相关产品推荐

