CLASSFUNC BLOG
We Share Our Knowledge
Google Tasks Schedules - Nhiệm vụ hàng đợi thực thi trên đám mây
Dam Van Duong
19 Th10 2020 02:26

Hôm nay, mình sẽ chia sẻ với các bạn về Google Tasks - Tạo các nhiệm vụ hàng đợi thực thi trên đám mây.

Cloud Tasks là một dịch vụ được quản lý hoàn toàn cho phép bạn quản lý việc thực hiện, điều phối và phân phối một số lượng lớn các nhiệm vụ được phân phối. Sử dụng Cloud Tasks, bạn có thể thực hiện công việc không đồng bộ bên ngoài yêu cầu của người dùng hoặc dịch vụ đối với dịch vụ. Chi tiết cài đặt và sử dụng Cloud Tasks như sau:

Bước 1: Truy cập Cloud Tasks API và Enable Cloud Tasks API.

Ảnh chụp Màn hình 0002-10-19 lúc 08.47.17.png

Bước 2: Tạo một Cloud Tasks Queue

`gcloud tasks queues create [QUEUE_ID]`

Trong đó [QUEUE_ID] là tên định danh bạn tạo cho hàng đợi của mình, ví dụ: "google-tasks-for-myjob" chẳng hạn.

Bước 3: Khởi tạo HTTP Target Tasks, ở đây các bạn có thể viết trên API để gọi đến, hoặc có thể viết trên HTTP Cloud function để tạo.

Chúng ta sẽ sử dụng Service Account để Authentication với Google Tasks. Tài khoản Service Account phải được thêm 2 quyền đó là:

  • Cloud Tasks: bạn có thể chọn các tác vụ như Cloud Tasks Enqueuer: Giúp tạo tasks mới, nếu bạn cần thêm các quyền khác như DELETE task, RUN task , có thể add thêm các role tương ứng của tác vụ Cloud Tasks
  • Service Accounts: ở đây mình chọn Service Account User

Ảnh chụp Màn hình 0002-10-17 lúc 17.21.52.png

Dưới đây là Setup khi Create Task của mình:

// const date = new Date(); // Intended date to schedule task const project = '***; const queue = 'geniam-tasks'; const location = 'asia-northeast1'; const {payload} = req.body; const url = 'https://asia-northeast1-***.cloudfunctions.net/googleTasksSchedule/sentEmail'; const client = new CloudTasksClient({ projectId: projectID, keyFilename, // đường dẫn trỏ đến file JSON Services Account của bạn }); // Construct the fully qualified queue name. const parent = client.queuePath(project, location, queue); // Convert message to buffer. const convertedPayload = JSON.stringify({payload: payload}); const body = Buffer.from(convertedPayload).toString('base64'); const task = { httpRequest: { httpMethod: 'POST', url, oidcToken: { serviceAccountEmail: email, }, headers: { 'Content-Type': 'application/json', }, body, }, }; // The time when the task is scheduled to be attempted. let seconds = moment(payload.start).diff(moment(), 'seconds'); console.log('Sent email with seconds', seconds); // check if event create < 15 minute not create task if (seconds <= 60 * 15) { return res.status(200).send('No need create google task schedule'); } seconds = seconds - 60 * 15; task.scheduleTime = { seconds: seconds + new Date() / 1000, // seconds: new Date(moment().add(1, 'minutes').format()).getTime() / 1000, }; // Send create task request. const [response] = await client.createTask({parent, task}); console.log(`Created task ${response.name}`); // update task queues id to event res.send(response.name);

Lưu ý: URL ở ví dụ trên là URL mà khi Task thực thi sẽ gọi đến URL này, với tham số truyền vào body {payload} bao gồm dữ liệu của chúng ta khi gửi lên để tạo Task. Mục Task.ScheduleTime chính là thời gian mà Task sẽ thực thi

Như vậy các bạn đã có thể tạo được nhiệm vụ hàng đợi trên đám mây rồi! Chúc các bạn thành công!.

Tài liệu tham khảo: