Вопрос или проблема
У меня есть два 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). Давайте рассмотрим, как это сделать шаг за шагом.
- Создайте 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();
}
}
- Настройка 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());
}
}
- Настройка CRON задачи в вашем Cloudflare Dashboard.
После того как вы создали CronWorker, вам необходимо настроить задачу в интерфейсе Cloudflare:
- Перейдите в раздел Workers на вашей панели Cloudflare.
- Найдите ваш CRON-воркер и зайдите в его настройки.
- В разделе Triggers добавьте новую задачу, выберите ее периодичность и время, когда вы хотите, чтобы воркер выполнялся.
- Тестирование и отладка.
Не забудьте протестировать вашу настройку, чтобы убедиться, что CRON-воркер успешно вызывает ваш API и обрабатывает ответ. Для этого вы можете следить за логами в панели управления Cloudflare.
Таким образом, вы сможете настроить вызов HonoJS API-эндпоинта с помощью CRON-воркера, используя service bindings. Если у вас будут дополнительные вопросы или возникнут проблемы в процессе настройки, не стесняйтесь обратиться к документации Cloudflare или задать вопросы в сообществе.