Mã sau hoạt động hoàn hảo trong môi trường dev. Một GET đến "/ _ah/api/worker/v1/tasks" gọi phương thức refresh() để thêm nhiệm vụ vào hàng đợi tác vụ mặc định POST tới "/ _ah/api/worker/v1/tasks" được xử lý bởi phương thức handle().Hàng đợi công việc của Máy ứng dụng của Google nhận được 404 khi gọi API Google Cloud Endpoints
@Api(name = "worker", version = "v1", scopes = { Constants.EMAIL_SCOPE }, clientIds = { Constants.API_EXPLORER_CLIENT_ID, Constants.WEB_CLIENT_ID })
public class WorkerApi
{
@ApiMethod(name="refresh", path = "tasks", httpMethod = HttpMethod.GET)
public void refresh()
{
MyObject myObject = new MyObject()
Queue queue = QueueFactory.getDefaultQueue();
TaskOptions o = TaskOptions.Builder.withUrl("/_ah/api/worker/v1/tasks");
o.payload(ApiHelper.ObjectToJson(myObject));
queue.add(o);
}
@ApiMethod(name="handle", path = "tasks", httpMethod = HttpMethod.POST)
public void handle(HttpServletRequest req, MyObject myObject)
{
// This handler is called if running in dev in environment
// If running on GAE this handler is never called.
}
}
Đáng buồn thay, khi được triển khai đến Google App Engine thực tế, phương thức xử lý không bao giờ được gọi bởi Hàng đợi công việc.
Điều thú vị là, tôi thành công có thể gọi xử lý bằng tay bằng cách sử dụng API Explorer trong đó sản xuất các bản ghi sau trong GAE console:
2014-11-24 12:01:30.914 /_ah/spi/my.test.application.WorkerApi.handle 200 1394ms 0kb Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36 module=default version=1
198.66.21.14 - - [24/Nov/2014:12:01:30 -0800] "POST /_ah/spi/my.test.application.WorkerApi.handle HTTP/1.1" 200 116 - "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36" "my-test-application.appspot.com" ms=1394 cpu_ms=1003 cpm_usd=0.000013 app_engine_release=1.9.16 instance=00c61b117c39338c333cff447edea78fa0f90d
Nhưng khi gọi bằng Queue Task, 404 luôn được trả về sản xuất như sau đăng nhập vào bảng điều khiển GAE:
Một lần nữa, mọi thứ hoạt động như mong đợi trong môi trường dev. Bị hỏng khi được triển khai sang GAE. Tôi đang làm gì sai?
So sánh các mục nhật ký, tôi nghĩ rằng tôi thấy vấn đề và thay đổi mã để:
TaskOptions o = TaskOptions.Builder.withUrl("/_ah/spi/my.test.application.WorkerApi.handle");
Nope. Điều này không hoạt động. Bây giờ nó bị hỏng trong môi trường dev và trong triển khai GAE.
Đăng nhập từ môi trường dev:
[INFO] INFO: Web hook at http://127.0.0.1:8080/_ah/spi/my.test.application.WorkerApi.handle returned status code 404. Rescheduling..
Log từ GAE console:
2014-11-24 12:24:10.872 /_ah/spi/my.test.application.WorkerApi.handle 404 396ms 0kb AppEngine-Google; (+http://code.google.com/appengine) module=default version=1
0.1.0.2 - - [24/Nov/2014:12:24:10 -0800] "POST /_ah/spi/my.test.application.WorkerApi.handle HTTP/1.1" 404 96 "https://my-test-application.appspot.com/_ah/spi/my.test.application.WorkerApi.refresh" "AppEngine-Google; (+http://code.google.com/appengine)" "my-test-application.appspot.com" ms=397 cpu_ms=23 cpm_usd=0.000011 queue_name=default task_name=7132899958322278984 app_engine_release=1.9.16 instance=00c61b117c565c0a8aa81e1b86e50d78f0346330
BTW, tôi đang sử dụng GAE SDK 1.9.16.
chúng tôi có cùng một vấn đề - ngạc nhiên điều này làm cho nó thành sản xuất ... – DaBeeeenster
@DaBeeeenster Chúng tôi có cùng một vấn đề ... Bạn có tìm thấy giải pháp nào khác ngoài việc tạo một servlet khác không? – bogumil