Крон-задача Cloudflare Workers для вызова конечной точки API honojs на том же домене workers

Вопрос или проблема

У меня есть два worker’а Cloudflare: API и CRON.

API — это простой HonoJS API:

import { Hono } from "hono";

const app = new Hono();

app.get("/hello", (c) => {
  // выполняем действия, включая асинхронные задачи.
  return c.text("Hello Hono!");
});

export default app;

В моем CRON worker’е я хочу вызывать конечную точку /hello каждый день.

Когда я пытаюсь использовать fetch, я получаю ошибку 1042, который при дальнейшем расследовании говорит мне, что я не могу вызывать один worker из другого worker, и мне следует использовать сервисные привязки.

Документация Cloudflare говорит, что сервисная привязка должна быть создана так:

import { WorkerEntrypoint } from "cloudflare:workers";

export class WorkerB extends WorkerEntrypoint {
  async add(a, b) { return a + b; }
}

Я не понимаю, как адаптировать это для моего экземпляра HonoJS, для которого я не могу найти документацию по использованию сервисных привязок.

Как мне вызвать конечную точку /hello в моей cron задаче каждый день?

Можете помочь мне?

Ответ или решение

Для того чтобы ваш CRON-воркер мог вызывать /hello-эндпоинт, созданный с использованием HonoJS, вам действительно потребуется использовать связи служб (service bindings). Давайте рассмотрим, как это сделать шаг за шагом.

  1. Создайте API-воркер с использованием HonoJS и зарегистрируйте его как службу.

Для этого вам нужно будет обновить ваш HonoJS API-воркер. Вот пример того, как это можно сделать:

import { Hono } from "hono";
import { WorkerEntrypoint } from "cloudflare:workers";

const app = new Hono();

app.get("/hello", async (c) => {
  // Выполнение асинхронных задач
  return c.text("Hello Hono!");
});

export class APIWorker extends WorkerEntrypoint {
  async invoke() {
    return app.fetch();
  }
}
  1. Настройка CRON-воркера для вызова API-воркера через service binding.

Теперь давайте настройте ваш CRON-воркер. Вам нужно будет использовать импорт API-воркера и вызвать его метод. Вот пример кода для вашего CRON-воркера:

import { WorkerEntrypoint } from "cloudflare:workers";
import { APIWorker } from './path/to/api'; // Укажите верный путь к вашему API-воркеру

export class CronWorker extends WorkerEntrypoint {
  async timedEvent() {
    const api = new APIWorker();

    // Вызов API-метода
    const response = await api.invoke();

    // Логирование или обработка ответа
    console.log(await response.text());
  }
}
  1. Настройка CRON задачи в вашем Cloudflare Dashboard.

После того как вы создали CronWorker, вам необходимо настроить задачу в интерфейсе Cloudflare:

  • Перейдите в раздел Workers на вашей панели Cloudflare.
  • Найдите ваш CRON-воркер и зайдите в его настройки.
  • В разделе Triggers добавьте новую задачу, выберите ее периодичность и время, когда вы хотите, чтобы воркер выполнялся.
  1. Тестирование и отладка.

Не забудьте протестировать вашу настройку, чтобы убедиться, что CRON-воркер успешно вызывает ваш API и обрабатывает ответ. Для этого вы можете следить за логами в панели управления Cloudflare.

Таким образом, вы сможете настроить вызов HonoJS API-эндпоинта с помощью CRON-воркера, используя service bindings. Если у вас будут дополнительные вопросы или возникнут проблемы в процессе настройки, не стесняйтесь обратиться к документации Cloudflare или задать вопросы в сообществе.

Оцените материал
Добавить комментарий

Капча загружается...