Flash unwinder contracts and scripts, relay lane tuning, trustless bridge and token-aggregation updates.
Made-with: Cursor
This commit is contained in:
@@ -9,6 +9,8 @@ export class MessageQueue {
|
||||
this.processed = new Set();
|
||||
this.failed = new Set();
|
||||
this.retryCounts = new Map();
|
||||
this.messageStore = new Map();
|
||||
this.inFlight = new Map();
|
||||
}
|
||||
|
||||
async add(messageData) {
|
||||
@@ -27,6 +29,7 @@ export class MessageQueue {
|
||||
return;
|
||||
}
|
||||
|
||||
this.messageStore.set(messageId, messageData);
|
||||
// Add to queue
|
||||
this.queue.push(messageData);
|
||||
this.logger.info(`Added message ${messageId} to queue. Queue size: ${this.queue.length}`);
|
||||
@@ -37,17 +40,25 @@ export class MessageQueue {
|
||||
return null;
|
||||
}
|
||||
|
||||
return this.queue.shift();
|
||||
const messageData = this.queue.shift();
|
||||
if (messageData && messageData.messageId) {
|
||||
this.inFlight.set(messageData.messageId, messageData);
|
||||
}
|
||||
return messageData;
|
||||
}
|
||||
|
||||
async markProcessed(messageId) {
|
||||
this.processed.add(messageId);
|
||||
this.retryCounts.delete(messageId);
|
||||
this.inFlight.delete(messageId);
|
||||
this.messageStore.delete(messageId);
|
||||
this.logger.info(`Message ${messageId} marked as processed`);
|
||||
}
|
||||
|
||||
async markFailed(messageId) {
|
||||
this.failed.add(messageId);
|
||||
this.retryCounts.delete(messageId);
|
||||
this.inFlight.delete(messageId);
|
||||
this.logger.error(`Message ${messageId} marked as failed`);
|
||||
}
|
||||
|
||||
@@ -58,10 +69,22 @@ export class MessageQueue {
|
||||
async retry(messageId) {
|
||||
const count = this.retryCounts.get(messageId) || 0;
|
||||
this.retryCounts.set(messageId, count + 1);
|
||||
|
||||
// Find message in queue or re-add it
|
||||
// In a production system, you'd store the original message data
|
||||
this.logger.info(`Message ${messageId} retry count: ${count + 1}`);
|
||||
|
||||
const existingIndex = this.queue.findIndex(m => m.messageId === messageId);
|
||||
if (existingIndex >= 0) {
|
||||
this.logger.info(`Message ${messageId} retry count: ${count + 1}`);
|
||||
return;
|
||||
}
|
||||
|
||||
const messageData = this.inFlight.get(messageId) || this.messageStore.get(messageId);
|
||||
if (!messageData) {
|
||||
this.logger.warn(`Cannot requeue ${messageId}; original message payload is unavailable`);
|
||||
return;
|
||||
}
|
||||
|
||||
this.inFlight.delete(messageId);
|
||||
this.queue.push(messageData);
|
||||
this.logger.info(`Message ${messageId} requeued. Retry count: ${count + 1}. Queue size: ${this.queue.length}`);
|
||||
}
|
||||
|
||||
getStats() {
|
||||
@@ -72,4 +95,3 @@ export class MessageQueue {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user