{"_id":"p-api-queue","name":"p-api-queue","dist-tags":{"latest":"0.0.2"},"versions":{"0.0.2":{"name":"p-api-queue","version":"0.0.2","main":"./dist/index.cjs","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"types":"dist/index.d.ts","scripts":{"build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build"},"author":"","license":"ISC","description":"A typed RabbitMQ task queue wrapper with delayed queues and reconnecting consumers.","sideEffects":false,"keywords":["rabbitmq","amqp","queue","typescript","delay-queue"],"devDependencies":{"@types/amqplib":"^0.10.8","@types/node":"^26.1.1","tsup":"^8.5.1","typescript":"5.8.3"},"dependencies":{"amqplib":"^1.0.3"},"engines":{"node":">=18"},"type":"module","gitHead":"222034621b7249b5256f4c0a2044dfa0f83a2772","_id":"p-api-queue@0.0.2","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-Z1lTd+q5rgJ3Dl0c2VIoC0PEBSxytLliq9DOYEymPwGGyVWLmAU6Qbv9+Q17H9qZqUBLfKEGBkYW94qaWpedgw==","shasum":"e5e6194f91a6ef701b65e755bdbbcaab4d8f1532","tarball":"https://registry.npmjs.org/p-api-queue/-/p-api-queue-0.0.2.tgz","fileCount":6,"unpackedSize":41258,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDQl2CUQGmc2CpTm2OxNzd2obhYhcMOMa8IgXqMEVOvTAiBhp9JvBwiebeUD9GGQ8p2jLYj1S3yPg2wF+yd4phyvlA=="}]},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"directories":{},"maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/p-api-queue_0.0.2_1783933424364_0.2755068636747555"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-13T09:03:44.302Z","0.0.2":"2026-07-13T09:03:44.499Z","modified":"2026-07-13T09:03:44.726Z"},"maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"description":"A typed RabbitMQ task queue wrapper with delayed queues and reconnecting consumers.","keywords":["rabbitmq","amqp","queue","typescript","delay-queue"],"license":"ISC","readme":"# p-api-queue\n\n基于 `amqplib` 的 TypeScript RabbitMQ 任务队列封装，支持普通队列、TTL + DLX 延迟队列、消费者并发控制和断线重连。\n\n## 安装\n\n```bash\nnpm install p-api-queue\n```\n\n## 使用\n\n```ts\nimport { create_rabbitmq } from \"p-api-queue\";\n\nconst queue = create_rabbitmq(\n  {\n    username: process.env.RABBITMQ_USER!,\n    password: process.env.RABBITMQ_PASSWORD!,\n    host: process.env.RABBITMQ_HOST!,\n    port: Number(process.env.RABBITMQ_PORT ?? 5672),\n  },\n  {\n    TASK_EFFECT_ANALYSIS_BEHAVIOR: {\n      persistent: true,\n      customer_count: 1,\n    },\n    TASK_EFFECT_ROBOT_REPLY: {\n      persistent: true,\n      delay_time: 10,\n      customer_count: 1,\n    },\n  },\n  {\n    logger: {\n      info: (position, message) => console.info(position, message),\n      error: (position, message) => console.error(position, message),\n    },\n  },\n);\n\nawait queue.register_consumer(\n  \"TASK_EFFECT_ANALYSIS_BEHAVIOR\",\n  async (task: { taskId: string }) => {\n    console.log(task.taskId);\n  },\n);\n\nawait queue.add_task(\"TASK_EFFECT_ANALYSIS_BEHAVIOR\", { taskId: \"task-1\" });\n\n// 应用退出时关闭连接\nawait queue.close();\n```\n\n`add_task` 和 `register_consumer` 会在内部检查就绪状态。RabbitMQ 尚未连接、队列尚未声明完成或正在重连时，调用会自动等待，无需在业务代码中额外调用 `ready()`。如果应用启动流程需要明确等待 RabbitMQ 就绪，仍然可以主动调用 `await queue.ready()`。\n\n## 单例模式\n\n`create_rabbitmq` 在同一个 Node.js 进程中只创建一个 RabbitMQ 实例。首次调用时传入配置：\n\n```ts\n// rabbitmq.ts\nimport { create_rabbitmq } from \"p-api-queue\";\n\nexport const RabbitMQ = create_rabbitmq(\n  {\n    username: process.env.RABBITMQ_USER!,\n    password: process.env.RABBITMQ_PASSWORD!,\n    host: process.env.RABBITMQ_HOST!,\n    port: Number(process.env.RABBITMQ_PORT ?? 5672),\n  },\n  {\n    TASK_QUEUE: {\n      persistent: true,\n      customer_count: 1,\n    },\n  },\n);\n\n```\n\n后续调用可以不传配置，返回的仍然是同一个实例：\n\n```ts\nimport { create_rabbitmq } from \"p-api-queue\";\n\nconst queue = create_rabbitmq();\nawait queue.add_task(\"TASK_QUEUE\", { task_id: \"task-1\" });\n```\n\n为了保留完整的队列名称类型提示，业务代码中更推荐直接导入首次创建后导出的 `RabbitMQ` 实例。\n\n## 延迟队列\n\n配置 `delay_time` 后，消息先进入普通队列，TTL 到期后通过死信交换机路由到消费队列。`delay_time` 的单位为秒。\n\n```ts\nconst queue = create_rabbitmq(connection, {\n  SEND_EMAIL: {\n    persistent: true,\n    delay_time: 30,\n    customer_count: 5,\n  },\n});\n```\n\n消费者处理失败时默认 `nack` 且不重新入队，避免无限重试。如确实需要重新入队：\n\n```ts\nawait queue.register_consumer(\"SEND_EMAIL\", handler, {\n  requeue_on_error: true,\n});\n```\n\n> RabbitMQ 的单队列 TTL 延迟方案存在队头阻塞特性。本包为每个逻辑队列配置固定延迟，适合与原实现相同的场景。\n\n## 发布\n\n```bash\nnpm run typecheck\nnpm run build\nnpm publish\n```\n","readmeFilename":"README.md","_rev":"1-7a7ac713a38d34a13e4851bad27432cd"}