POST method is not working in fetch inside Queue Handler

Hono version: 4.6.20 Wrangler version: 3.107.2 I've tried a lot but fetch function inside queue is not executing in the worker both deployed version and local dev server.
import { Hono, Env } from 'hono'
import { env } from "hono/adapter";
import { send_to_queue } from '../utils/send-to-queue';

type Bindings = {
REFERRAL_ENGINE_URL: string;
DB_QUEUE: Queue;
}

interface QueueDataType {
data: any;
ref_url: string;
}

const app = new Hono<{ Bindings: Bindings }>()

app.get('/', (c) => {
return c.json({ message: "Go Away" }, 200);
})

app.post('/', async (c) => {
const data = await c.req.json()
const EP_URL = env(c).EP_URL;
console.log("Data Received")

const Q_DATA : QueueDataType = {
data: data,
ref_url: EP_URL
}

await send_to_queue(Q_DATA, c)

return c.json({ message: 'Request Received!' })
})

async function queueHandler(batch: MessageBatch<QueueDataType>, c: Context) {
for (let message of batch.messages) {
console.log("Data Received from Queue");
try {
console.log("Sending data to referral engine");
console.log(message.body.data);
console.log(typeof(message.body.data));
const response = await fetch(`${message.body.ref_url}/api/v1/referral`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer 9e985a31cd0581672bf8454123662de7'
},
body: JSON.stringify(message.body.data),
});

if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
// await send_to_ref(message.body.data, message.body.ref_url);
message.ack();
} catch (error) {
console.error("Error forwarding data from queue:", error);
console.log("Retrying after 100 seconds");
message.retry({ delaySeconds: 100 });
}
}
}

export default {
fetch: app.fetch,
async queue(batch: MessageBatch<QueueDataType>, c: Env){
queueHandler(batch, c)
},
};
import { Hono, Env } from 'hono'
import { env } from "hono/adapter";
import { send_to_queue } from '../utils/send-to-queue';

type Bindings = {
REFERRAL_ENGINE_URL: string;
DB_QUEUE: Queue;
}

interface QueueDataType {
data: any;
ref_url: string;
}

const app = new Hono<{ Bindings: Bindings }>()

app.get('/', (c) => {
return c.json({ message: "Go Away" }, 200);
})

app.post('/', async (c) => {
const data = await c.req.json()
const EP_URL = env(c).EP_URL;
console.log("Data Received")

const Q_DATA : QueueDataType = {
data: data,
ref_url: EP_URL
}

await send_to_queue(Q_DATA, c)

return c.json({ message: 'Request Received!' })
})

async function queueHandler(batch: MessageBatch<QueueDataType>, c: Context) {
for (let message of batch.messages) {
console.log("Data Received from Queue");
try {
console.log("Sending data to referral engine");
console.log(message.body.data);
console.log(typeof(message.body.data));
const response = await fetch(`${message.body.ref_url}/api/v1/referral`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer 9e985a31cd0581672bf8454123662de7'
},
body: JSON.stringify(message.body.data),
});

if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
// await send_to_ref(message.body.data, message.body.ref_url);
message.ack();
} catch (error) {
console.error("Error forwarding data from queue:", error);
console.log("Retrying after 100 seconds");
message.retry({ delaySeconds: 100 });
}
}
}

export default {
fetch: app.fetch,
async queue(batch: MessageBatch<QueueDataType>, c: Env){
queueHandler(batch, c)
},
};
4 Replies
James
James4d ago
?pings
SuperHelpflare
Please do not ping community members for non-moderation reasons. Doing so will not solve your issue faster and will make people less likely to want to help you.
TheLegendVibes
TheLegendVibesOP4d ago
sorry, pinged by mistake
rdutton
rdutton2d ago
You are awaiting the individual requests, but I think you also need to await the 'queueHandler' function itself. Try changing queueHandler(batch, c) to await queueHandler(batch, c)

Did you find this page helpful?